p14-ir.cpp revision 0691a5c83246604a89654e0dfc25870e742035b4
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) { 290691a5c83246604a89654e0dfc25870e742035b4Rafael Espindola // CHECK: define linkonce_odr void @_ZN2X2C1ERKS_(%struct.X0* %this, %struct.X0*) unnamed_addr 309c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK: call void @_ZN2X2C2ERKS_({{.*}}) nounwind 319c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK-NEXT: ret void 329c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK-NEXT: } 330d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor X2 x2a(x2); 340691a5c83246604a89654e0dfc25870e742035b4Rafael Espindola // CHECK: define linkonce_odr void @_ZN2X3C1ERKS_(%struct.X0* %this, %struct.X0*) unnamed_addr 359c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK: call void @_ZN2X3C2ERKS_({{.*}}) nounwind 369c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK-NEXT: ret void 379c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK-NEXT: } 380d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor X3 x3a(x3); 390691a5c83246604a89654e0dfc25870e742035b4Rafael Espindola // CHECK: define linkonce_odr void @_ZN2X5C1ERS_({{.*}}) unnamed_addr 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() { 580691a5c83246604a89654e0dfc25870e742035b4Rafael Espindola // CHECK: define linkonce_odr void @_ZN2X8C1Ev(%struct.X0* %this) unnamed_addr 599c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK: call void @_ZN2X8C2Ev({{.*}}) nounwind 609c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK-NEXT: ret void 61eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor X8(); 6239dbad9b67cd9e36b9cd3b48a16caf7e4461211eJohn McCall 630691a5c83246604a89654e0dfc25870e742035b4Rafael Espindola // CHECK: define linkonce_odr void @_ZN2X9C1Ev(%struct.X0* %this) unnamed_addr 6439dbad9b67cd9e36b9cd3b48a16caf7e4461211eJohn McCall // FIXME: check that this is the end of the line here: 6539dbad9b67cd9e36b9cd3b48a16caf7e4461211eJohn McCall // CHECK: call void @_ZN2X9C2Ev({{.*}}) 669c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK-NEXT: ret void 67eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor X9(); 689c0c1f333ab8f5a3da055b99ee94778689face17John McCall 690691a5c83246604a89654e0dfc25870e742035b4Rafael Espindola // CHECK: define linkonce_odr void @_ZN2X9C2Ev(%struct.X0* %this) unnamed_addr 709c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK: call void @_ZN2X6C2Ev({{.*}}) nounwind 7139dbad9b67cd9e36b9cd3b48a16caf7e4461211eJohn McCall // FIXME: and here: 7239dbad9b67cd9e36b9cd3b48a16caf7e4461211eJohn McCall // CHECK-NEXT: call void @_ZN2X7C2Ev({{.*}}) 739c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK: ret void 749c0c1f333ab8f5a3da055b99ee94778689face17John McCall 750691a5c83246604a89654e0dfc25870e742035b4Rafael Espindola // CHECK: define linkonce_odr void @_ZN2X8C2Ev(%struct.X0* %this) unnamed_addr 769c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK: call void @_ZN2X6C2Ev({{.*}}) nounwind 779c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK-NEXT: ret void 78eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor} 79