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