1 // RUN: %clang_cc1 -emit-llvm -o - %s -triple %itanium_abi_triple | FileCheck %s 2 // RUN: %clang_cc1 -emit-llvm -o - %s -triple %itanium_abi_triple -std=c++98 -fexceptions -fcxx-exceptions | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-EH 3 4 // Hexagon calling convention lowering is horribly broken and fails to pass A 5 // object to B constructor at all! 6 // XFAIL: hexagon 7 8 struct A { 9 A(); 10 ~A(); 11 }; 12 13 struct B { 14 B(A = A()); 15 ~B(); 16 }; 17 18 void f(); 19 // CHECK-LABEL: define void @_Z1gv() 20 void g() { 21 // CHECK: br label %[[LOOP:.*]] 22 23 // [[LOOP]]: 24 // CHECK: {{call|invoke}} {{.*}} @_ZN1AC1Ev([[TEMPORARY:.*]]) 25 // CHECK-EH: unwind label %[[PARTIAL_ARRAY_LPAD:.*]] 26 // CHECK: {{call|invoke}} {{.*}} @_ZN1BC1E1A({{.*}}, [[TEMPORARY]]) 27 // CHECK-EH: unwind label %[[A_AND_PARTIAL_ARRAY_LPAD:.*]] 28 // CHECK: {{call|invoke}} {{.*}} @_ZN1AD1Ev([[TEMPORARY]]) 29 // CHECK-EH: unwind label %[[PARTIAL_ARRAY_LPAD]] 30 // CHECK: getelementptr {{.*}}, i{{[0-9]*}} 1 31 // CHECK: icmp eq 32 // CHECK: br i1 {{.*}} label %[[LOOP]] 33 B b[5]; 34 35 // CHECK: {{call|invoke}} void @_Z1fv() 36 f(); 37 38 // CHECK-NOT: @_ZN1AD1Ev( 39 // CHECK: {{call|invoke}} {{.*}} @_ZN1BD1Ev( 40 } 41