Wow, the Hexagon target is just horribly broken. Reduced testcase: struct A { A(); A(const A&); ~A(); }; void f(A a); void g() { f(A()); }
This completely fails to pass an A object to f. Instrumented version: #include <stdio.h> #define DUMP(ptr) printf("%s %p\\n", __PRETTY_FUNCTION__, ptr) struct A { A() { DUMP(this); } A(const A&) { DUMP(this); } ~A() { DUMP(this); } }; void f(A a) { DUMP(&a); } int main() { f(A()); } ... prints: A::A() 0x7ffd54d95658 void f(A) 0x7ffd54d95638 A::~A() 0x7ffd54d95658 Also, the hexagon bot appears to be failing to send mail. On 11 May 2017 at 13:17, Krzysztof Parzyszek via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Hexagon is still broken. :( > > http://lab.llvm.org:8011/builders/clang-hexagon-elf/builds/7942 > > -Krzysztof > > > On 5/11/2017 1:58 PM, Richard Smith via cfe-commits wrote: > >> Author: rsmith >> Date: Thu May 11 13:58:24 2017 >> New Revision: 302817 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=302817&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! >> >> Re-commit of r302750, reverted in r302776. >> >> Added: >> cfe/trunk/test/CodeGenCXX/array-default-argument.cpp >> - copied, changed from r302775, cfe/trunk/test/CodeGenCXX/arra >> y-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/CG >> ExprAgg.cpp?rev=302817&r1=302816&r2=302817&view=diff >> ============================================================ >> ================== >> --- cfe/trunk/lib/CodeGen/CGExprAgg.cpp (original) >> +++ cfe/trunk/lib/CodeGen/CGExprAgg.cpp Thu May 11 13:58:24 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 = >> >> Copied: cfe/trunk/test/CodeGenCXX/array-default-argument.cpp (from >> r302775, cfe/trunk/test/CodeGenCXX/array-default-argument.cpp) >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCX >> X/array-default-argument.cpp?p2=cfe/trunk/test/CodeGenCXX/ >> array-default-argument.cpp&p1=cfe/trunk/test/CodeGenCXX/ >> array-default-argument.cpp&r1=302775&r2=302817&rev=302817&view=diff >> ============================================================ >> ================== >> --- cfe/trunk/test/CodeGenCXX/array-default-argument.cpp (original) >> +++ cfe/trunk/test/CodeGenCXX/array-default-argument.cpp Thu May 11 >> 13:58:24 2017 >> @@ -17,11 +17,11 @@ void g() { >> // CHECK: br label %[[LOOP:.*]] >> // [[LOOP]]: >> - // CHECK: {{call|invoke}}[[THISCALL:( x86_thiscallcc)?]] void >> @_ZN1AC1Ev([[TEMPORARY:.*]]) >> + // CHECK: {{call|invoke}} {{.*}} @_ZN1AC1Ev([[TEMPORARY:.*]]) >> // CHECK-EH: unwind label %[[PARTIAL_ARRAY_LPAD:.*]] >> - // CHECK: {{call|invoke}}[[THISCALL]] void @_ZN1BC1E1A({{.*}}, >> [[TEMPORARY]]) >> + // CHECK: {{call|invoke}} {{.*}} @_ZN1BC1E1A({{.*}}, [[TEMPORARY]]) >> // CHECK-EH: unwind label %[[A_AND_PARTIAL_ARRAY_LPAD:.*]] >> - // CHECK: {{call|invoke}}[[THISCALL]] void @_ZN1AD1Ev([[TEMPORARY]]) >> + // CHECK: {{call|invoke}} {{.*}} @_ZN1AD1Ev([[TEMPORARY]]) >> // CHECK-EH: unwind label %[[PARTIAL_ARRAY_LPAD]] >> // CHECK: getelementptr {{.*}}, i{{[0-9]*}} 1 >> // CHECK: icmp eq >> @@ -32,5 +32,5 @@ void g() { >> f(); >> // CHECK-NOT: @_ZN1AD1Ev( >> - // CHECK: {{call|invoke}}[[THISCALL]] void @_ZN1BD1Ev( >> + // CHECK: {{call|invoke}} {{.*}} @_ZN1BD1Ev( >> } >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> >> > -- > Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted > by The Linux Foundation > > _______________________________________________ > 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