summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaInit.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2013-02-02 01:13:06 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2013-02-02 01:13:06 +0000
commitd712d0dbddcd97e979b813158fe42fc3a351e460 (patch)
tree6605ed5fb67df9e920c6ef5adeabfcff13d032ef /clang/lib/Sema/SemaInit.cpp
parentf5209c4b459d3fc21a6bdfff7534ee6a8762b11a (diff)
downloadbcm5719-llvm-d712d0dbddcd97e979b813158fe42fc3a351e460.tar.gz
bcm5719-llvm-d712d0dbddcd97e979b813158fe42fc3a351e460.zip
Don't forget to run destructors when we create an array temporary of class type.
llvm-svn: 174257
Diffstat (limited to 'clang/lib/Sema/SemaInit.cpp')
-rw-r--r--clang/lib/Sema/SemaInit.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp
index c3d612b7327..95f6c76be7b 100644
--- a/clang/lib/Sema/SemaInit.cpp
+++ b/clang/lib/Sema/SemaInit.cpp
@@ -5240,7 +5240,8 @@ InitializationSequence::Perform(Sema &S,
QualType Ty = ResultType ? ResultType->getNonReferenceType() : Step->Type;
bool IsTemporary = Entity.getType()->isReferenceType();
InitializedEntity TempEntity = InitializedEntity::InitializeTemporary(Ty);
- InitListChecker PerformInitList(S, IsTemporary ? TempEntity : Entity,
+ InitializedEntity InitEntity = IsTemporary ? TempEntity : Entity;
+ InitListChecker PerformInitList(S, InitEntity,
InitList, Ty, /*VerifyOnly=*/false,
Kind.getKind() != InitializationKind::IK_DirectList ||
!S.getLangOpts().CPlusPlus11);
@@ -5259,7 +5260,9 @@ InitializationSequence::Perform(Sema &S,
InitListExpr *StructuredInitList =
PerformInitList.getFullyStructuredList();
CurInit.release();
- CurInit = S.Owned(StructuredInitList);
+ CurInit = shouldBindAsTemporary(InitEntity)
+ ? S.MaybeBindToTemporary(StructuredInitList)
+ : S.Owned(StructuredInitList);
break;
}
OpenPOWER on IntegriCloud