mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 21:10:12 +01:00
Fix crash on 'destroy' with return type and no params (#5527)
Fuzzer-found crash
This commit is contained in:
@@ -64,7 +64,9 @@ auto HandleParseNode(Context& context, Parse::ReturnTypeId node_id) -> bool {
|
||||
// not on the pattern stacks yet. They are only needed in that case if we have
|
||||
// a return type, which we now know that we do.
|
||||
if (context.node_stack().PeekNodeKind() ==
|
||||
Parse::NodeKind::IdentifierNameNotBeforeParams) {
|
||||
Parse::NodeKind::IdentifierNameNotBeforeParams ||
|
||||
context.node_stack().PeekNodeKind() ==
|
||||
Parse::NodeKind::KeywordNameNotBeforeParams) {
|
||||
context.pattern_block_stack().Push();
|
||||
context.full_pattern_stack().PushFullPattern(
|
||||
FullPatternStack::Kind::ExplicitParamList);
|
||||
|
||||
@@ -180,3 +180,16 @@ class C {
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
fn C.destroy.Foo() {}
|
||||
|
||||
// --- fail_return_type_after_no_params.carbon
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
// Return type handling special-cases the "no params" case.
|
||||
class C {
|
||||
// CHECK:STDERR: fail_return_type_after_no_params.carbon:[[@LINE+4]]:3: error: missing implicit `self` parameter [DestroyFunctionMissingSelf]
|
||||
// CHECK:STDERR: fn destroy -> ();
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
fn destroy -> ();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user