forked from OSchip/llvm-project
Revert "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."
Revert "clang/test/CodeGenCXX/array-default-argument.cpp: Satisfy targets that have x86_thiscallcc." This reverts commit r302750 and its fixup r302757 because the test is still breaking on some of the ARM bots. array-default-argument.cpp:20:12: error: expected string not found in input // CHECK: {{call|invoke}}[[THISCALL:( x86_thiscallcc)?]] void @_ZN1AC1Ev([[TEMPORARY:.*]]) ^ <stdin>:18:1: note: scanning from here arrayctor.loop: ; preds = %arrayctor.loop, %entry ^ <stdin>:28:2: note: possible intended match here call void @_Z1fv() ^ -- llvm-svn: 302776
This commit is contained in:
parent
c5cc230587
commit
1f53d03a15
|
@ -512,20 +512,12 @@ void AggExprEmitter::EmitArrayInit(Address DestPtr, llvm::ArrayType *AType,
|
|||
currentElement->addIncoming(element, entryBB);
|
||||
|
||||
// Emit the actual filler expression.
|
||||
{
|
||||
// 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);
|
||||
}
|
||||
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 =
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
// 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}}[[THISCALL:( x86_thiscallcc)?]] void @_ZN1AC1Ev([[TEMPORARY:.*]])
|
||||
// CHECK-EH: unwind label %[[PARTIAL_ARRAY_LPAD:.*]]
|
||||
// CHECK: {{call|invoke}}[[THISCALL]] void @_ZN1BC1E1A({{.*}}, [[TEMPORARY]])
|
||||
// CHECK-EH: unwind label %[[A_AND_PARTIAL_ARRAY_LPAD:.*]]
|
||||
// CHECK: {{call|invoke}}[[THISCALL]] 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}}[[THISCALL]] void @_ZN1BD1Ev(
|
||||
}
|
Loading…
Reference in New Issue