summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/TreeTransform.h
diff options
context:
space:
mode:
authorAlexey Bataev <a.bataev@hotmail.com>2014-10-16 03:04:35 +0000
committerAlexey Bataev <a.bataev@hotmail.com>2014-10-16 03:04:35 +0000
commit2a06681133ecc39336d64700688f1b99a8b04bbb (patch)
tree260559942a8d7de9f25e444accb1dfc79a2e6d8d /clang/lib/Sema/TreeTransform.h
parent275746d7688d9617114e746b2d167f171eee3f31 (diff)
downloadbcm5719-llvm-2a06681133ecc39336d64700688f1b99a8b04bbb.tar.gz
bcm5719-llvm-2a06681133ecc39336d64700688f1b99a8b04bbb.zip
Bugfix in template instantiation in CXXPseudoDestructorExpr.
Fix for clang crash when instantiating a template with qualified lookup for members in non-class types. Differential Revision: http://reviews.llvm.org/D5769 llvm-svn: 219897
Diffstat (limited to 'clang/lib/Sema/TreeTransform.h')
-rw-r--r--clang/lib/Sema/TreeTransform.h13
1 files changed, 10 insertions, 3 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h
index 799678e799c..28890f59ce2 100644
--- a/clang/lib/Sema/TreeTransform.h
+++ b/clang/lib/Sema/TreeTransform.h
@@ -10510,9 +10510,16 @@ TreeTransform<Derived>::RebuildCXXPseudoDestructorExpr(Expr *Base,
// The scope type is now known to be a valid nested name specifier
// component. Tack it on to the end of the nested name specifier.
- if (ScopeType)
- SS.Extend(SemaRef.Context, SourceLocation(),
- ScopeType->getTypeLoc(), CCLoc);
+ if (ScopeType) {
+ if (!ScopeType->getType()->getAs<TagType>()) {
+ getSema().Diag(ScopeType->getTypeLoc().getBeginLoc(),
+ diag::err_expected_class_or_namespace)
+ << ScopeType->getType() << getSema().getLangOpts().CPlusPlus;
+ return ExprError();
+ }
+ SS.Extend(SemaRef.Context, SourceLocation(), ScopeType->getTypeLoc(),
+ CCLoc);
+ }
SourceLocation TemplateKWLoc; // FIXME: retrieve it from caller.
return getSema().BuildMemberReferenceExpr(Base, BaseType,
OpenPOWER on IntegriCloud