]> granicus.if.org Git - clang/commitdiff
After an error of any kind has occurred, don't assert when attempting
authorDouglas Gregor <dgregor@apple.com>
Fri, 4 Mar 2011 20:42:52 +0000 (20:42 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 4 Mar 2011 20:42:52 +0000 (20:42 +0000)
to find the instantiated declaration within a template instantiation
fails to do so. It's likely that the original instantiation got
dropped due to instantiation failures, which doesn't actually break
the invariants of the AST. This eliminates a number of
crash-on-invalid failures, e.g., PR9300.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@127030 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaTemplateInstantiateDecl.cpp

index 577c2c28c47cc2ef3aa72650b7dda12b90cd3a8b..3473c877093c1b2b54eb5568f75fb994bb631009 100644 (file)
@@ -3031,9 +3031,11 @@ NamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D,
     }
 
     // UsingShadowDecls can instantiate to nothing because of using hiding.
-    assert((Result || isa<UsingShadowDecl>(D) || D->isInvalidDecl() ||
-            cast<Decl>(ParentDC)->isInvalidDecl())
-           && "Unable to find instantiation of declaration!");
+    // Note: this assertion end up firing in invalid code even when none of the 
+    // AST invariants have been broken, so we explicitly check whether any
+    // errors have been emitted
+    assert((Result || isa<UsingShadowDecl>(D) || Diags.hasErrorOccurred()) &&
+           "Unable to find instantiation of declaration!");
 
     D = Result;
   }