summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplateInstantiate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiate.cpp')
-rw-r--r--clang/lib/Sema/SemaTemplateInstantiate.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp
index 4a12b077666..057b256ddd4 100644
--- a/clang/lib/Sema/SemaTemplateInstantiate.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp
@@ -56,7 +56,10 @@ Sema::InstantiatingTemplate::~InstantiatingTemplate() {
/// \brief Post-diagnostic hook for printing the instantiation stack.
void Sema::PrintInstantiationStackHook(unsigned, void *Cookie) {
- static_cast<Sema*>(Cookie)->PrintInstantiationStack();
+ Sema &SemaRef = *static_cast<Sema*>(Cookie);
+ SemaRef.PrintInstantiationStack();
+ SemaRef.LastTemplateInstantiationErrorContext
+ = SemaRef.ActiveTemplateInstantiations.back().Entity;
}
/// \brief Prints the current instantiation stack through a series of
@@ -503,7 +506,7 @@ Sema::InstantiateBaseSpecifiers(
for (ClassTemplateSpecializationDecl::base_class_iterator
Base = ClassTemplate->getTemplatedDecl()->bases_begin(),
BaseEnd = ClassTemplate->getTemplatedDecl()->bases_end();
- Base != BaseEnd && !Invalid; ++Base) {
+ Base != BaseEnd; ++Base) {
if (!Base->getType()->isDependentType()) {
// FIXME: Allocate via ASTContext
InstantiatedBases.push_back(new CXXBaseSpecifier(*Base));
@@ -533,7 +536,8 @@ Sema::InstantiateBaseSpecifiers(
Invalid = true;
}
- if (AttachBaseSpecifiers(ClassTemplateSpec, &InstantiatedBases[0],
+ if (!Invalid &&
+ AttachBaseSpecifiers(ClassTemplateSpec, &InstantiatedBases[0],
InstantiatedBases.size()))
Invalid = true;
OpenPOWER on IntegriCloud