aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2011-11-10 09:08:44 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2011-11-10 09:08:44 +0000
commitc430ef4f92eedea7d3378f05a2b05982ed3713dc (patch)
treedc50d13a53ad62f4c1085ac8ed591485e9f6c159
parent153221717e39ce41323d5bc6b8b8bf130923c1bd (diff)
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
-rw-r--r--lib/Parse/ParseCXXInlineMethods.cpp5
-rw-r--r--test/Parser/cxx-default-delete.cpp4
2 files changed, 9 insertions, 0 deletions
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}}
+};