p14-ir.cpp revision 9c0c1f333ab8f5a3da055b99ee94778689face17
10d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fexceptions -o - %s | FileCheck %s
20d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor
3eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor// Copy constructor
40d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregorstruct X0 {
50d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  X0();
60d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  X0(const X0 &) throw();
70d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  X0(X0 &);
80d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor};
90d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor
100d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregorstruct X1 {
110d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  X1();
120d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  X1(const X1 &) throw();
130d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor};
140d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor
150d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregorstruct X2 : X1 {
160d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  X2();
170d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor};
180d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregorstruct X3 : X0, X1 {
190d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  X3();
200d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor};
210d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor
220d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregorstruct X4 {
230d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  X4(X4 &) throw();
240d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor};
250d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor
260d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregorstruct X5 : X0, X4 { };
270d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor
280d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregorvoid test(X2 x2, X3 x3, X5 x5) {
290d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  // CHECK: define linkonce_odr void @_ZN2X2C1ERKS_
309c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK:      call void @_ZN2X2C2ERKS_({{.*}}) nounwind
319c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK-NEXT: ret void
329c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK-NEXT: }
330d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  X2 x2a(x2);
340d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  // CHECK: define linkonce_odr void @_ZN2X3C1ERKS_
359c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK:      call void @_ZN2X3C2ERKS_({{.*}}) nounwind
369c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK-NEXT: ret void
379c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK-NEXT: }
380d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  X3 x3a(x3);
390d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  // CHECK: define linkonce_odr void @_ZN2X5C1ERS_
400d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  // CHECK-NOT: call void @__cxa_call_unexpected
410d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  // CHECK: ret void
420d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor  X5 x5a(x5);
430d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor}
44eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor
45eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor// Default constructor
46eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregorstruct X6 {
47eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor  X6() throw();
48eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor};
49eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor
50eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregorstruct X7 {
51eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor  X7();
52eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor};
53eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor
54eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregorstruct X8 : X6 { };
55eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregorstruct X9 : X6, X7 { };
56eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor
57eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregorvoid test() {
58eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor  // CHECK: define linkonce_odr void @_ZN2X8C1Ev
599c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK:      call void @_ZN2X8C2Ev({{.*}}) nounwind
609c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK-NEXT: ret void
61eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor  X8();
62eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor  // CHECK: define linkonce_odr void @_ZN2X9C1Ev
639c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK:      call void @_ZN2X9C2Ev({{.*}}){{$}}
649c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK-NEXT: ret void
65eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor  X9();
669c0c1f333ab8f5a3da055b99ee94778689face17John McCall
679c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK: define linkonce_odr void @_ZN2X9C2Ev
689c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK:      call void @_ZN2X6C2Ev({{.*}}) nounwind
699c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK-NEXT: call void @_ZN2X7C2Ev({{.*}}){{$}}
709c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK: ret void
719c0c1f333ab8f5a3da055b99ee94778689face17John McCall
729c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK: define linkonce_odr void @_ZN2X8C2Ev
739c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK:      call void @_ZN2X6C2Ev({{.*}}) nounwind
749c0c1f333ab8f5a3da055b99ee94778689face17John McCall  // CHECK-NEXT: ret void
75eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor}
76