]> granicus.if.org Git - clang/commitdiff
Follow-up to r217302: Don't crash on ~A::A() if A is undeclared.
authorNico Weber <nicolasweber@gmx.de>
Fri, 30 Jan 2015 04:05:15 +0000 (04:05 +0000)
committerNico Weber <nicolasweber@gmx.de>
Fri, 30 Jan 2015 04:05:15 +0000 (04:05 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@227555 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Parse/ParseExprCXX.cpp
test/Parser/cxx-class.cpp

index 422b486c7b2d93f8f177f194a31552b898bda7b8..a753b0ff27a4c00aaac18432d989d80b54b6d585 100644 (file)
@@ -2516,7 +2516,8 @@ bool Parser::ParseUnqualifiedId(CXXScopeSpec &SS, bool EnteringContext,
       }
       if (ParseOptionalCXXScopeSpecifier(SS, ObjectType, EnteringContext))
         return true;
-      if (Tok.isNot(tok::identifier) || NextToken().is(tok::coloncolon)) {
+      if (Tok.isNot(tok::identifier) || NextToken().is(tok::coloncolon) ||
+          SS.isInvalid()) {
         Diag(TildeLoc, diag::err_destructor_tilde_scope);
         return true;
       }
index 9d68cd96b0843ec97610b512e9abc0854ebfa04d..7c5c4ecf58ce394d953fb33fb40dd30310f57c21 100644 (file)
@@ -157,6 +157,8 @@ namespace DtorErrors {
 
   struct D { struct X {}; ~D() throw(X); };
   ~D::D() throw(X) {} // expected-error {{'~' in destructor name should be after nested name specifier}}
+
+  ~Undeclared::Undeclared() {} // expected-error {{use of undeclared identifier 'Undeclared'}} expected-error {{'~' in destructor name should be after nested name specifier}}
 }
 
 namespace BadFriend {