From: Richard Smith Date: Thu, 10 Nov 2011 09:08:44 +0000 (+0000) Subject: PR11148: Fix crash-on-invalid if an invalid member declaration is marked as X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c430ef4f92eedea7d3378f05a2b05982ed3713dc;p=clang PR11148: Fix crash-on-invalid if an invalid member declaration is marked as defaulted or deleted. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144270 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/ParseCXXInlineMethods.cpp b/lib/Parse/ParseCXXInlineMethods.cpp index 65f7f56fe9..2877628f26 100644 --- a/lib/Parse/ParseCXXInlineMethods.cpp +++ b/lib/Parse/ParseCXXInlineMethods.cpp @@ -66,6 +66,11 @@ Decl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS, if (Tok.is(tok::equal)) { ConsumeToken(); + if (!FnD) { + SkipUntil(tok::semi); + return 0; + } + bool Delete = false; SourceLocation KWLoc; if (Tok.is(tok::kw_delete)) { diff --git a/test/Parser/cxx-default-delete.cpp b/test/Parser/cxx-default-delete.cpp index f34f6fb014..9ace0acee8 100644 --- a/test/Parser/cxx-default-delete.cpp +++ b/test/Parser/cxx-default-delete.cpp @@ -13,3 +13,7 @@ struct foo { }; void baz() = delete; + +struct quux { + int quux() = default; // expected-error{{constructor cannot have a return type}} expected-error {{member 'quux' has the same name as its class}} +};