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).
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