Home | History | Annotate | Download | only in CodeGenCXX
      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