diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2009-07-01 19:21:19 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-07-01 19:21:19 +0000 |
commit | c1fc3ec87807a35e2e12bb41a079b10c9db1350a (patch) | |
tree | 922fe4e3b982e26a909e8c971701f321c5f81131 /clang/lib/Sema/SemaDeclCXX.cpp | |
parent | 39e64d452a930ad8aad708842cc53527d8a77c18 (diff) | |
download | bcm5719-llvm-c1fc3ec87807a35e2e12bb41a079b10c9db1350a.tar.gz bcm5719-llvm-c1fc3ec87807a35e2e12bb41a079b10c9db1350a.zip |
Patch to implement template types in ctor-initializer list.
Also has fix for bugzilla-4469.
llvm-svn: 74631
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index a0bc94808bb..bbb173a02ad 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -648,6 +648,7 @@ Sema::ActOnMemInitializer(DeclPtrTy ConstructorD, Scope *S, const CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, + TypeTy *TemplateTypeTy, SourceLocation IdLoc, SourceLocation LParenLoc, ExprTy **Args, unsigned NumArgs, @@ -678,7 +679,7 @@ Sema::ActOnMemInitializer(DeclPtrTy ConstructorD, // composed of a single identifier refers to the class member. A // mem-initializer-id for the hidden base class may be specified // using a qualified name. ] - if (!SS.getScopeRep()) { + if (!SS.getScopeRep() && !TemplateTypeTy) { // Look for a member, first. FieldDecl *Member = 0; DeclContext::lookup_result Result @@ -695,13 +696,14 @@ Sema::ActOnMemInitializer(DeclPtrTy ConstructorD, } } // It didn't name a member, so see if it names a class. - TypeTy *BaseTy = getTypeName(*MemberOrBase, IdLoc, S, &SS); + TypeTy *BaseTy = TemplateTypeTy ? TemplateTypeTy + : getTypeName(*MemberOrBase, IdLoc, S, &SS); if (!BaseTy) return Diag(IdLoc, diag::err_mem_init_not_member_or_class) << MemberOrBase << SourceRange(IdLoc, RParenLoc); QualType BaseType = QualType::getFromOpaquePtr(BaseTy); - if (!BaseType->isRecordType()) + if (!BaseType->isRecordType() && !BaseType->isDependentType()) return Diag(IdLoc, diag::err_base_init_does_not_name_class) << BaseType << SourceRange(IdLoc, RParenLoc); |