1 // RUN: %clang_cc1 -Wno-unused-value -emit-llvm -o - %s | FileCheck %s
3 extern "C" int printf(...);
4 extern "C" void abort();
9 A (int j
) : i(j
) {printf("this = %p A(%d)\n", this, j
);}
10 A (const A
&j
) : i(j
.i
) {printf("this = %p const A&(%d)\n", this, i
);}
11 A
& operator= (const A
&j
) { i
= j
.i
; abort(); return *this; }
12 ~A() { printf("this = %p ~A(%d)\n", this, i
); }
18 B (const A
& a
) { i
= a
.i
; }
19 B() {printf("this = %p B()\n", this);}
20 B (const B
&j
) : i(j
.i
) {printf("this = %p const B&(%d)\n", this, i
);}
21 ~B() { printf("this = %p ~B(%d)\n", this, i
); }
26 return ({ j
? A(1) : A(0); });
32 A b
= ({ A
a(1); A
a1(2); A
a2(3); a1
; a2
; a
; });
35 A c
= ({ A
a(1); A
a1(2); A
a2(3); a1
; a2
; a
; A
a3(4); a2
; a3
; });
42 const A
&b
= ({ A
a(1); a
; });
49 // CHECK: call void @_ZN1AC1Ei
50 // CHECK: call void @_ZN1AC1ERKS_
51 // CHECK: call void @_ZN1AD1Ev
52 // CHECK: call void @_ZN1BC1ERK1A
53 // CHECK: call void @_ZN1AD1Ev
54 const B
&b
= ({ A
a(1); a
; });
71 // Check that array-to-pointer conversion occurs in a
72 // statement-expression.