aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaTemplateInstantiateDecl.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-03-04 20:42:52 +0000
committerDouglas Gregor <dgregor@apple.com>2011-03-04 20:42:52 +0000
commita93fc9f053bae84cf7c2a04ea6b1b26e0ea44d8f (patch)
tree3d1d7e5ebabcfe31c26bdc66af0093a98c6281b4 /lib/Sema/SemaTemplateInstantiateDecl.cpp
parentb710722d2348cd0945d2b4f02062c7f685146eb0 (diff)
After an error of any kind has occurred, don't assert when attempting
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
Diffstat (limited to 'lib/Sema/SemaTemplateInstantiateDecl.cpp')
-rw-r--r--lib/Sema/SemaTemplateInstantiateDecl.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp
index 577c2c28c4..3473c87709 100644
--- a/lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ b/lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -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;
}