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) { 29176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines // CHECK: define linkonce_odr void @_ZN2X2C1ERKS_(%struct.X2* %this, %struct.X2* dereferenceable({{[0-9]+}})) unnamed_addr 304e1125f630e75a52209b928e9d43b638abf39987Bill Wendling // CHECK: call void @_ZN2X2C2ERKS_({{.*}}) [[NUW:#[0-9]+]] 319c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK-NEXT: ret void 329c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK-NEXT: } 330d405db2d847acba979a74d747894bcf4d580fe3Douglas Gregor X2 x2a(x2); 34176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines // CHECK: define linkonce_odr void @_ZN2X3C1ERKS_(%struct.X3* %this, %struct.X3* dereferenceable({{[0-9]+}})) unnamed_addr 354e1125f630e75a52209b928e9d43b638abf39987Bill Wendling // CHECK: call void @_ZN2X3C2ERKS_({{.*}}) [[NUW]] 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() { 589cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner // CHECK: define linkonce_odr void @_ZN2X8C1Ev(%struct.X8* %this) unnamed_addr 594e1125f630e75a52209b928e9d43b638abf39987Bill Wendling // CHECK: call void @_ZN2X8C2Ev({{.*}}) [[NUW]] 609c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK-NEXT: ret void 61eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor X8(); 6239dbad9b67cd9e36b9cd3b48a16caf7e4461211eJohn McCall 639cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner // CHECK: define linkonce_odr void @_ZN2X9C1Ev(%struct.X9* %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 690e2c34f92f00628d48968dfea096d36381f494cbStephen Hines // CHECK: define linkonce_odr void @_ZN2X8C2Ev(%struct.X8* %this) unnamed_addr 700e2c34f92f00628d48968dfea096d36381f494cbStephen Hines // CHECK: call void @_ZN2X6C2Ev({{.*}}) [[NUW]] 710e2c34f92f00628d48968dfea096d36381f494cbStephen Hines // CHECK-NEXT: ret void 720e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 739cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner // CHECK: define linkonce_odr void @_ZN2X9C2Ev(%struct.X9* %this) unnamed_addr 744e1125f630e75a52209b928e9d43b638abf39987Bill Wendling // CHECK: call void @_ZN2X6C2Ev({{.*}}) [[NUW]] 7539dbad9b67cd9e36b9cd3b48a16caf7e4461211eJohn McCall // FIXME: and here: 769cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner // CHECK-NEXT: bitcast 7739dbad9b67cd9e36b9cd3b48a16caf7e4461211eJohn McCall // CHECK-NEXT: call void @_ZN2X7C2Ev({{.*}}) 789c0c1f333ab8f5a3da055b99ee94778689face17John McCall // CHECK: ret void 79eb8c670d2949eb62005eca36c64c9461f2a2173eDouglas Gregor} 804e1125f630e75a52209b928e9d43b638abf39987Bill Wendling 814e1125f630e75a52209b928e9d43b638abf39987Bill Wendling// CHECK: attributes [[NUW]] = { nounwind{{.*}} } 82