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.

llvm-svn: 127030
This commit is contained in:
Douglas Gregor 2011-03-04 20:42:52 +00:00
parent 8887d6593f
commit 8c2d3f4248
1 changed files with 5 additions and 3 deletions

View 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;
}