diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-02-02 01:13:06 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-02-02 01:13:06 +0000 |
commit | d712d0dbddcd97e979b813158fe42fc3a351e460 (patch) | |
tree | 6605ed5fb67df9e920c6ef5adeabfcff13d032ef /clang/lib/Sema/SemaInit.cpp | |
parent | f5209c4b459d3fc21a6bdfff7534ee6a8762b11a (diff) | |
download | bcm5719-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.cpp | 7 |
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; } |