On 11 May 2017 at 21:14, Richard Smith <rich...@metafoo.co.uk> wrote: > Thanks for the revert, fixed up and recommitted in r302817. > > Any idea why not a single buildbot sent me any email about this? :( (A > couple of them were red at the previous change too, but some of them were > not (eg. clang-cmake-armv7-a15).
Hm, I have no idea... @Renato, thoughts? > > On 11 May 2017 at 01:28, Diana Picus <diana.pi...@linaro.org> wrote: >> >> Hexagon too: >> http://lab.llvm.org:8011/builders/clang-hexagon-elf/builds/7916 >> >> On 11 May 2017 at 10:27, Diana Picus <diana.pi...@linaro.org> wrote: >> > Hi Richard, >> > >> > I reverted this and its fixup in r302776 since some of the ARM bots >> > were still broken: >> > http://lab.llvm.org:8011/builders/clang-cmake-armv7-a15/builds/6969 >> > http://lab.llvm.org:8011/builders/clang-cmake-thumbv7-a15/builds/6959 >> > http://lab.llvm.org:8011/builders/clang-cmake-armv7-a15-full/builds/6717 >> > >> > http://lab.llvm.org:8011/builders/clang-cmake-thumbv7-a15-full-sh/builds/1518 >> > >> > Sorry, >> > Diana >> > >> > On 11 May 2017 at 02:17, Richard Smith via cfe-commits >> > <cfe-commits@lists.llvm.org> wrote: >> >> Author: rsmith >> >> Date: Wed May 10 19:17:17 2017 >> >> New Revision: 302750 >> >> >> >> URL: http://llvm.org/viewvc/llvm-project?rev=302750&view=rev >> >> Log: >> >> PR22877: When constructing an array via a constructor with a default >> >> argument >> >> in list-initialization, run cleanups for the default argument after >> >> each >> >> iteration of the initialization loop. >> >> >> >> We previously only ran the destructor for any temporary once, at the >> >> end of the >> >> complete loop, rather than once per iteration! >> >> >> >> Added: >> >> cfe/trunk/test/CodeGenCXX/array-default-argument.cpp >> >> Modified: >> >> cfe/trunk/lib/CodeGen/CGExprAgg.cpp >> >> >> >> Modified: cfe/trunk/lib/CodeGen/CGExprAgg.cpp >> >> URL: >> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprAgg.cpp?rev=302750&r1=302749&r2=302750&view=diff >> >> >> >> ============================================================================== >> >> --- cfe/trunk/lib/CodeGen/CGExprAgg.cpp (original) >> >> +++ cfe/trunk/lib/CodeGen/CGExprAgg.cpp Wed May 10 19:17:17 2017 >> >> @@ -512,12 +512,20 @@ void AggExprEmitter::EmitArrayInit(Addre >> >> currentElement->addIncoming(element, entryBB); >> >> >> >> // Emit the actual filler expression. >> >> - LValue elementLV = >> >> - CGF.MakeAddrLValue(Address(currentElement, elementAlign), >> >> elementType); >> >> - if (filler) >> >> - EmitInitializationToLValue(filler, elementLV); >> >> - else >> >> - EmitNullInitializationToLValue(elementLV); >> >> + { >> >> + // C++1z [class.temporary]p5: >> >> + // when a default constructor is called to initialize an >> >> element of >> >> + // an array with no corresponding initializer [...] the >> >> destruction of >> >> + // every temporary created in a default argument is sequenced >> >> before >> >> + // the construction of the next array element, if any >> >> + CodeGenFunction::RunCleanupsScope CleanupsScope(CGF); >> >> + LValue elementLV = >> >> + CGF.MakeAddrLValue(Address(currentElement, elementAlign), >> >> elementType); >> >> + if (filler) >> >> + EmitInitializationToLValue(filler, elementLV); >> >> + else >> >> + EmitNullInitializationToLValue(elementLV); >> >> + } >> >> >> >> // Move on to the next element. >> >> llvm::Value *nextElement = >> >> >> >> Added: cfe/trunk/test/CodeGenCXX/array-default-argument.cpp >> >> URL: >> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/array-default-argument.cpp?rev=302750&view=auto >> >> >> >> ============================================================================== >> >> --- cfe/trunk/test/CodeGenCXX/array-default-argument.cpp (added) >> >> +++ cfe/trunk/test/CodeGenCXX/array-default-argument.cpp Wed May 10 >> >> 19:17:17 2017 >> >> @@ -0,0 +1,36 @@ >> >> +// RUN: %clang_cc1 -emit-llvm -o - %s -triple %itanium_abi_triple | >> >> FileCheck %s >> >> +// RUN: %clang_cc1 -emit-llvm -o - %s -triple %itanium_abi_triple >> >> -fexceptions -fcxx-exceptions | FileCheck %s --check-prefix=CHECK >> >> --check-prefix=CHECK-EH >> >> + >> >> +struct A { >> >> + A(); >> >> + ~A(); >> >> +}; >> >> + >> >> +struct B { >> >> + B(A = A()); >> >> + ~B(); >> >> +}; >> >> + >> >> +void f(); >> >> +// CHECK-LABEL: define void @_Z1gv() >> >> +void g() { >> >> + // CHECK: br label %[[LOOP:.*]] >> >> + >> >> + // [[LOOP]]: >> >> + // CHECK: {{call|invoke}} void @_ZN1AC1Ev([[TEMPORARY:.*]]) >> >> + // CHECK-EH: unwind label %[[PARTIAL_ARRAY_LPAD:.*]] >> >> + // CHECK: {{call|invoke}} void @_ZN1BC1E1A({{.*}}, [[TEMPORARY]]) >> >> + // CHECK-EH: unwind label %[[A_AND_PARTIAL_ARRAY_LPAD:.*]] >> >> + // CHECK: {{call|invoke}} void @_ZN1AD1Ev([[TEMPORARY]]) >> >> + // CHECK-EH: unwind label %[[PARTIAL_ARRAY_LPAD]] >> >> + // CHECK: getelementptr {{.*}}, i{{[0-9]*}} 1 >> >> + // CHECK: icmp eq >> >> + // CHECK: br i1 {{.*}} label %[[LOOP]] >> >> + B b[5]; >> >> + >> >> + // CHECK: {{call|invoke}} void @_Z1fv() >> >> + f(); >> >> + >> >> + // CHECK-NOT: @_ZN1AD1Ev( >> >> + // CHECK: {{call|invoke}} void @_ZN1BD1Ev( >> >> +} >> >> >> >> >> >> _______________________________________________ >> >> cfe-commits mailing list >> >> cfe-commits@lists.llvm.org >> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > > _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits