| // RUN: %clang_cc1 -emit-llvm -fexceptions -fcxx-exceptions -std=c++0x -o - %s | FileCheck %s |
| |
| struct non_trivial { |
| non_trivial(); |
| ~non_trivial() noexcept(false); |
| }; |
| non_trivial::non_trivial() {} |
| non_trivial::~non_trivial() noexcept(false) {} |
| |
| // We use a virtual base to ensure that the constructor |
| // delegation optimization (complete->base) can't be |
| // performed. |
| struct delegator { |
| non_trivial n; |
| delegator(); |
| delegator(int); |
| delegator(char); |
| delegator(bool); |
| }; |
| |
| delegator::delegator() { |
| throw 0; |
| } |
| |
| |
| delegator::delegator(bool) |
| {} |
| |
| // CHECK: define {{.*}} @_ZN9delegatorC1Ec |
| // CHECK: {{.*}} @_ZN9delegatorC1Eb |
| // CHECK: void @__cxa_throw |
| // CHECK: void @_ZSt9terminatev |
| // CHECK: {{.*}} @_ZN9delegatorD1Ev |
| // CHECK: define {{.*}} @_ZN9delegatorC2Ec |
| // CHECK: {{.*}} @_ZN9delegatorC2Eb |
| // CHECK: void @__cxa_throw |
| // CHECK: void @_ZSt9terminatev |
| // CHECK: {{.*}} @_ZN9delegatorD2Ev |
| delegator::delegator(char) |
| : delegator(true) { |
| throw 0; |
| } |
| |
| // CHECK: define {{.*}} @_ZN9delegatorC1Ei |
| // CHECK: {{.*}} @_ZN9delegatorC1Ev |
| // CHECK-NOT: void @_ZSt9terminatev |
| // CHECK: ret |
| // CHECK-NOT: void @_ZSt9terminatev |
| // CHECK: define {{.*}} @_ZN9delegatorC2Ei |
| // CHECK: {{.*}} @_ZN9delegatorC2Ev |
| // CHECK-NOT: void @_ZSt9terminatev |
| // CHECK: ret |
| // CHECK-NOT: void @_ZSt9terminatev |
| delegator::delegator(int) |
| : delegator() |
| {} |