blob: bc89ce934fd0b361802e77c881c71e74ac0486bd [file] [log] [blame]
Douglas Gregor0d405db2010-07-01 20:59:04 +00001// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fexceptions -o - %s | FileCheck %s
2
Douglas Gregoreb8c6702010-07-01 22:31:05 +00003// Copy constructor
Douglas Gregor0d405db2010-07-01 20:59:04 +00004struct X0 {
5 X0();
6 X0(const X0 &) throw();
7 X0(X0 &);
8};
9
10struct X1 {
11 X1();
12 X1(const X1 &) throw();
13};
14
15struct X2 : X1 {
16 X2();
17};
18struct X3 : X0, X1 {
19 X3();
20};
21
22struct X4 {
23 X4(X4 &) throw();
24};
25
26struct X5 : X0, X4 { };
27
28void test(X2 x2, X3 x3, X5 x5) {
29 // CHECK: define linkonce_odr void @_ZN2X2C1ERKS_
30 // CHECK-NOT: define
31 // CHECK: call void @__cxa_call_unexpected
32 // CHECK-NOT: define
33 // CHECK: ret void
34 X2 x2a(x2);
35 // CHECK: define linkonce_odr void @_ZN2X3C1ERKS_
36 // CHECK-NOT: define
37 // CHECK: call void @__cxa_call_unexpected
38 // CHECK-NOT: define
39 // CHECK: ret void
40 X3 x3a(x3);
41 // CHECK: define linkonce_odr void @_ZN2X5C1ERS_
42 // CHECK-NOT: call void @__cxa_call_unexpected
43 // CHECK: ret void
44 X5 x5a(x5);
45}
Douglas Gregoreb8c6702010-07-01 22:31:05 +000046
47// Default constructor
48struct X6 {
49 X6() throw();
50};
51
52struct X7 {
53 X7();
54};
55
56struct X8 : X6 { };
57struct X9 : X6, X7 { };
58
59void test() {
60 // CHECK: define linkonce_odr void @_ZN2X8C1Ev
61 // CHECK-NOT: define
62 // CHECK: call void @__cxa_call_unexpected
63 // CHECK-NOT: define
64 // CHECK: ret void
65 X8();
66 // CHECK: define linkonce_odr void @_ZN2X9C1Ev
67 // CHECK-NOT: call void @__cxa_call_unexpected
68 // CHECK: ret void
69 X9();
70}