summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclCXX.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2009-07-01 19:21:19 +0000
committerFariborz Jahanian <fjahanian@apple.com>2009-07-01 19:21:19 +0000
commitc1fc3ec87807a35e2e12bb41a079b10c9db1350a (patch)
tree922fe4e3b982e26a909e8c971701f321c5f81131 /clang/lib/Sema/SemaDeclCXX.cpp
parent39e64d452a930ad8aad708842cc53527d8a77c18 (diff)
downloadbcm5719-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.cpp8
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);
OpenPOWER on IntegriCloud