summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-06-13 02:59:33 +0000
committerAnders Carlsson <andersca@mac.com>2009-06-13 02:59:33 +0000
commit20ee0ed4eaefbf7dba08385137240682e81742e7 (patch)
tree2bf8728bdd4fc08150b51acb6a7f3922aef60633 /clang/lib
parent64e6529e76e33fef1447a0bb6a8e53469eaf4a9e (diff)
downloadbcm5719-llvm-20ee0ed4eaefbf7dba08385137240682e81742e7.tar.gz
bcm5719-llvm-20ee0ed4eaefbf7dba08385137240682e81742e7.zip
If a CXXRecordDecl is a class template, the 'this' type should be the injected class name type. Fixes pr4383.
llvm-svn: 73284
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/AST/DeclCXX.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp
index 94daf484458..8430da2be6b 100644
--- a/clang/lib/AST/DeclCXX.cpp
+++ b/clang/lib/AST/DeclCXX.cpp
@@ -260,7 +260,12 @@ QualType CXXMethodDecl::getThisType(ASTContext &C) const {
// the type of this is const volatile X*.
assert(isInstance() && "No 'this' for static methods!");
- QualType ClassTy = C.getTagDeclType(const_cast<CXXRecordDecl*>(getParent()));
+
+ QualType ClassTy;
+ if (ClassTemplateDecl *TD = getParent()->getDescribedClassTemplate())
+ ClassTy = TD->getInjectedClassNameType(C);
+ else
+ ClassTy = C.getTagDeclType(const_cast<CXXRecordDecl*>(getParent()));
ClassTy = ClassTy.getWithAdditionalQualifiers(getTypeQualifiers());
return C.getPointerType(ClassTy).withConst();
}
OpenPOWER on IntegriCloud