blob: 68f492fb9762d4cba216a698c3d3789028e37c3b [file] [log] [blame]
Sean Hunt059ce0d2011-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
Sean Huntb76af9c2011-05-03 23:05:34 +000025
26delegator::delegator(bool)
27{}
28
29// CHECK: define void @_ZN9delegatorC1Ec
30// CHECK: void @_ZN9delegatorC1Eb
31// CHECK: void @__cxa_throw
32// CHECK: lpad
33// CHECK: void @_ZN9delegatorD1Ev
34// CHECK: define void @_ZN9delegatorC2Ec
35// CHECK: void @_ZN9delegatorC2Eb
36// CHECK: void @__cxa_throw
37// CHECK: lpad
38// CHECK: invoke void @_ZN9delegatorD2Ev
39delegator::delegator(char)
40 : delegator(true) {
41 throw 0;
42}
43
Sean Hunt059ce0d2011-05-01 07:04:31 +000044// CHECK: define void @_ZN9delegatorC1Ei
Sean Huntb76af9c2011-05-03 23:05:34 +000045// CHECK: void @_ZN9delegatorC1Ev
Sean Hunt059ce0d2011-05-01 07:04:31 +000046// CHECK-NOT: lpad
47// CHECK: ret
48// CHECK-NOT: lpad
49// CHECK: define void @_ZN9delegatorC2Ei
Sean Huntb76af9c2011-05-03 23:05:34 +000050// CHECK: void @_ZN9delegatorC2Ev
Sean Hunt059ce0d2011-05-01 07:04:31 +000051// CHECK-NOT: lpad
52// CHECK: ret
53// CHECK-NOT: lpad
54delegator::delegator(int)
55 : delegator()
56{}