Remove calls to isDependentContext, since we handle that case earlier in the code. Make BuildImplicitBaseInitializer return a boolean instead.

llvm-svn: 102159
This commit is contained in:
Anders Carlsson 2010-04-23 02:00:02 +00:00
parent 62232d90cf
commit 6bd91c387b
1 changed files with 15 additions and 23 deletions

View File

@ -1431,11 +1431,12 @@ Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo,
RParenLoc);
}
static CXXBaseOrMemberInitializer *
static bool
BuildImplicitBaseInitializer(Sema &SemaRef,
const CXXConstructorDecl *Constructor,
CXXBaseSpecifier *BaseSpec,
bool IsInheritedVirtualBase) {
bool IsInheritedVirtualBase,
CXXBaseOrMemberInitializer *&CXXBaseInit) {
InitializedEntity InitEntity
= InitializedEntity::InitializeBase(SemaRef.Context, BaseSpec,
IsInheritedVirtualBase);
@ -1450,9 +1451,9 @@ BuildImplicitBaseInitializer(Sema &SemaRef,
BaseInit = SemaRef.MaybeCreateCXXExprWithTemporaries(move(BaseInit));
if (BaseInit.isInvalid())
return 0;
return true;
CXXBaseOrMemberInitializer *CXXBaseInit =
CXXBaseInit =
new (SemaRef.Context) CXXBaseOrMemberInitializer(SemaRef.Context,
SemaRef.Context.getTrivialTypeSourceInfo(BaseSpec->getType(),
SourceLocation()),
@ -1461,7 +1462,7 @@ BuildImplicitBaseInitializer(Sema &SemaRef,
BaseInit.takeAs<Expr>(),
SourceLocation());
return CXXBaseInit;
return false;
}
bool
@ -1520,11 +1521,9 @@ Sema::SetBaseOrMemberInitializers(CXXConstructorDecl *Constructor,
AllToInit.push_back(Value);
} else if (!AnyErrors) {
bool IsInheritedVirtualBase = !DirectVBases.count(VBase);
CXXBaseOrMemberInitializer *CXXBaseInit =
BuildImplicitBaseInitializer(*this, Constructor, VBase,
IsInheritedVirtualBase);
if (!CXXBaseInit) {
CXXBaseOrMemberInitializer *CXXBaseInit;
if (BuildImplicitBaseInitializer(*this, Constructor, VBase,
IsInheritedVirtualBase, CXXBaseInit)) {
HadError = true;
continue;
}
@ -1543,11 +1542,10 @@ Sema::SetBaseOrMemberInitializers(CXXConstructorDecl *Constructor,
= AllBaseFields.lookup(Base->getType()->getAs<RecordType>())) {
AllToInit.push_back(Value);
} else if (!AnyErrors) {
CXXBaseOrMemberInitializer *CXXBaseInit =
BuildImplicitBaseInitializer(*this, Constructor, Base,
/*IsInheritedVirtualBase=*/false);
if (!CXXBaseInit) {
CXXBaseOrMemberInitializer *CXXBaseInit;
if (BuildImplicitBaseInitializer(*this, Constructor, Base,
/*IsInheritedVirtualBase=*/false,
CXXBaseInit)) {
HadError = true;
continue;
}
@ -1584,7 +1582,7 @@ Sema::SetBaseOrMemberInitializers(CXXConstructorDecl *Constructor,
continue;
}
if ((*Field)->getType()->isDependentType() || AnyErrors)
if (AnyErrors)
continue;
QualType FT = Context.getBaseElementType((*Field)->getType());
@ -1602,13 +1600,7 @@ Sema::SetBaseOrMemberInitializers(CXXConstructorDecl *Constructor,
HadError = true;
continue;
}
// Don't attach synthesized member initializers in a dependent
// context; they'll be regenerated a template instantiation
// time.
if (CurContext->isDependentContext())
continue;
CXXBaseOrMemberInitializer *Member =
new (Context) CXXBaseOrMemberInitializer(Context,
*Field, SourceLocation(),