Fix a crash for nested initializer list initialization. Still does the wrong thing in CodeGen, in that it never destructs anything.

llvm-svn: 150922
This commit is contained in:
Sebastian Redl 2012-02-19 12:27:43 +00:00
parent c84ded88ea
commit 4f28b58b7b
1 changed files with 19 additions and 10 deletions

View File

@ -3078,16 +3078,25 @@ static void TryListInitialization(Sema &S,
TryReferenceListInitialization(S, Entity, Kind, InitList, Sequence);
return;
}
if (DestType->isRecordType() && !DestType->isAggregateType()) {
if (S.getLangOptions().CPlusPlus0x) {
Expr *Arg = InitList;
// A direct-initializer is not list-syntax, i.e. there's no special
// treatment of "A a({1, 2});".
TryConstructorInitialization(S, Entity, Kind, &Arg, 1, DestType,
Sequence, Kind.getKind() != InitializationKind::IK_Direct);
} else
Sequence.SetFailed(InitializationSequence::FK_InitListBadDestinationType);
return;
if (DestType->isRecordType()) {
if (S.RequireCompleteType(InitList->getLocStart(), DestType, S.PDiag())) {
Sequence.SetFailed(InitializationSequence::FK_Incomplete);
return;
}
if (!DestType->isAggregateType()) {
if (S.getLangOptions().CPlusPlus0x) {
Expr *Arg = InitList;
// A direct-initializer is not list-syntax, i.e. there's no special
// treatment of "A a({1, 2});".
TryConstructorInitialization(S, Entity, Kind, &Arg, 1, DestType,
Sequence,
Kind.getKind() != InitializationKind::IK_Direct);
} else
Sequence.SetFailed(
InitializationSequence::FK_InitListBadDestinationType);
return;
}
}
InitListChecker CheckInitList(S, Entity, InitList,