1 // RUN: %clang_cc1 -emit-llvm -fexceptions -fcxx-exceptions -std=c++11 -o - %s | FileCheck %s 2 3 struct non_trivial { 4 non_trivial(); 5 ~non_trivial() noexcept(false); 6 }; 7 non_trivial::non_trivial() {} 8 non_trivial::~non_trivial() noexcept(false) {} 9 10 // We use a virtual base to ensure that the constructor 11 // delegation optimization (complete->base) can't be 12 // performed. 13 struct delegator { 14 non_trivial n; 15 delegator(); 16 delegator(int); 17 delegator(char); 18 delegator(bool); 19 }; 20 21 delegator::delegator() { 22 throw 0; 23 } 24 25 26 delegator::delegator(bool) 27 {} 28 29 // CHECK: define {{.*}} @_ZN9delegatorC1Ec 30 // CHECK: {{.*}} @_ZN9delegatorC1Eb 31 // CHECK: void @__cxa_throw 32 // CHECK: void @_ZSt9terminatev 33 // CHECK: {{.*}} @_ZN9delegatorD1Ev 34 // CHECK: define {{.*}} @_ZN9delegatorC2Ec 35 // CHECK: {{.*}} @_ZN9delegatorC2Eb 36 // CHECK: void @__cxa_throw 37 // CHECK: void @_ZSt9terminatev 38 // CHECK: {{.*}} @_ZN9delegatorD2Ev 39 delegator::delegator(char) 40 : delegator(true) { 41 throw 0; 42 } 43 44 // CHECK: define {{.*}} @_ZN9delegatorC1Ei 45 // CHECK: {{.*}} @_ZN9delegatorC1Ev 46 // CHECK-NOT: void @_ZSt9terminatev 47 // CHECK: ret 48 // CHECK-NOT: void @_ZSt9terminatev 49 // CHECK: define {{.*}} @_ZN9delegatorC2Ei 50 // CHECK: {{.*}} @_ZN9delegatorC2Ev 51 // CHECK-NOT: void @_ZSt9terminatev 52 // CHECK: ret 53 // CHECK-NOT: void @_ZSt9terminatev 54 delegator::delegator(int) 55 : delegator() 56 {} 57