1// RUN: %clang_cc1 -emit-llvm -fexceptions -fcxx-exceptions -std=c++11 -o - %s | FileCheck %s 2 3struct non_trivial { 4 non_trivial(); 5 ~non_trivial() noexcept(false); 6}; 7non_trivial::non_trivial() {} 8non_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. 13struct delegator { 14 non_trivial n; 15 delegator(); 16 delegator(int); 17 delegator(char); 18 delegator(bool); 19}; 20 21delegator::delegator() { 22 throw 0; 23} 24 25 26delegator::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 39delegator::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 54delegator::delegator(int) 55 : delegator() 56{} 57 58namespace PR12890 { 59 class X { 60 int x; 61 X() = default; 62 X(int); 63 }; 64 X::X(int) : X() {} 65} 66// CHECK: define {{.*}} @_ZN7PR128901XC1Ei(%"class.PR12890::X"* %this, i32) 67// CHECK: call void @llvm.memset.p0i8.{{i32|i64}}(i8* {{.*}}, i8 0, {{i32|i64}} 4, i32 4, i1 false) 68