blob: 5b432c769016c0a7bbefad87e61798c1a172e7c8 [file] [log] [blame]
Alexis Hunt61bc1732011-05-01 07:04:31 +00001// RUN: %clang_cc1 -emit-llvm -fexceptions -fcxx-exceptions -std=c++0x -o - %s | FileCheck %s
2
3struct non_trivial {
4 non_trivial();
5 ~non_trivial();
6};
7non_trivial::non_trivial() {}
8non_trivial::~non_trivial() {}
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// CHECK: define void @_ZN9delegatorC1Ei
26// CHECK: call void @_ZN9delegatorC1Ev
27// CHECK-NOT: lpad
28// CHECK: ret
29// CHECK-NOT: lpad
30// CHECK: define void @_ZN9delegatorC2Ei
31// CHECK: call void @_ZN9delegatorC2Ev
32// CHECK-NOT: lpad
33// CHECK: ret
34// CHECK-NOT: lpad
35delegator::delegator(int)
36 : delegator()
37{}
38
39delegator::delegator(bool)
40{}
41
42// CHECK: define void @_ZN9delegatorC2Ec
43// CHECK: call void @_ZN9delegatorC2Eb
44// CHECK: call void @__cxa_throw
45delegator::delegator(char)
46 : delegator(true) {
47 throw 0;
48}