Fix parse support for 'fn F[];' (#5135)

According to approved syntax at
https://github.com/carbon-language/carbon-lang/blob/trunk/proposals/p3848.md#syntax-defined,
`fn F[]` without explicit parameters should be valid. This makes it
work, then adds some validation to prevent `class C[]` in check.

Note that for `fn`, positional parameters are a TODO -- but this allows
me to test validation in `fn destroy[]` which is rejected, not just a
TODO.
This commit is contained in:
Jon Ross-Perkins
2025-03-18 00:31:17 +00:00
committed by GitHub
parent a584ee120e
commit 8738497301
15 changed files with 402 additions and 93 deletions
+7 -5
View File
@@ -385,11 +385,13 @@ static auto ValidateIfDestroy(Context& context, bool is_redecl,
return;
}
CARBON_CHECK(
orig_param_patterns_id.has_value(),
"TODO: Positional parameters are currently rejected as part of requiring "
"implicit parameters, because it's an invalid parse tree; add a "
"diagnostic once this is testable");
if (!orig_param_patterns_id.has_value()) {
CARBON_DIAGNOSTIC(DestroyFunctionPositionalParams, Error,
"missing empty explicit parameter list");
context.emitter().Emit(function_info.latest_decl_id(),
DestroyFunctionPositionalParams);
return;
}
if (orig_param_patterns_id != SemIR::InstBlockId::Empty) {
CARBON_DIAGNOSTIC(DestroyFunctionNonEmptyExplicitParams, Error,