diff options
| author | Anders Carlsson <andersca@mac.com> | 2009-06-13 02:59:33 +0000 |
|---|---|---|
| committer | Anders Carlsson <andersca@mac.com> | 2009-06-13 02:59:33 +0000 |
| commit | 20ee0ed4eaefbf7dba08385137240682e81742e7 (patch) | |
| tree | 2bf8728bdd4fc08150b51acb6a7f3922aef60633 /clang/lib | |
| parent | 64e6529e76e33fef1447a0bb6a8e53469eaf4a9e (diff) | |
| download | bcm5719-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.cpp | 7 |
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(); } |

