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