1 | // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s |
2 | |
3 | struct Field { |
4 | Field(); |
5 | ~Field(); |
6 | }; |
7 | |
8 | struct Base { |
9 | Base(); |
10 | ~Base(); |
11 | }; |
12 | |
13 | struct A : Base { |
14 | A(); |
15 | ~A(); |
16 | |
17 | virtual void f(); |
18 | |
19 | Field field; |
20 | }; |
21 | |
22 | // CHECK-LABEL: define void @_ZN1AC2Ev(%struct.A* %this) unnamed_addr |
23 | // CHECK: call void @_ZN4BaseC2Ev( |
24 | // CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTV1A, i32 0, inrange i32 0, i32 2) to i32 (...)**) |
25 | // CHECK: call void @_ZN5FieldC1Ev( |
26 | // CHECK: ret void |
27 | A::A() { } |
28 | |
29 | // CHECK-LABEL: define void @_ZN1AD2Ev(%struct.A* %this) unnamed_addr |
30 | // CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTV1A, i32 0, inrange i32 0, i32 2) to i32 (...)**) |
31 | // CHECK: call void @_ZN5FieldD1Ev( |
32 | // CHECK: call void @_ZN4BaseD2Ev( |
33 | // CHECK: ret void |
34 | A::~A() { } |
35 | |
36 | struct B : Base { |
37 | virtual void f(); |
38 | |
39 | Field field; |
40 | }; |
41 | |
42 | void f() { B b; } |
43 | |
44 | // CHECK-LABEL: define linkonce_odr void @_ZN1BC1Ev(%struct.B* %this) unnamed_addr |
45 | // CHECK: call void @_ZN1BC2Ev( |
46 | |
47 | // CHECK-LABEL: define linkonce_odr void @_ZN1BD1Ev(%struct.B* %this) unnamed_addr |
48 | // CHECK: call void @_ZN1BD2Ev( |
49 | |
50 | // CHECK-LABEL: define linkonce_odr void @_ZN1BC2Ev(%struct.B* %this) unnamed_addr |
51 | // CHECK: call void @_ZN4BaseC2Ev( |
52 | // CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTV1B, i32 0, inrange i32 0, i32 2) to i32 (...)**) |
53 | // CHECK: call void @_ZN5FieldC1Ev |
54 | // CHECK: ret void |
55 | |
56 | // CHECK-LABEL: define linkonce_odr void @_ZN1BD2Ev(%struct.B* %this) unnamed_addr |
57 | // CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTV1B, i32 0, inrange i32 0, i32 2) to i32 (...)**) |
58 | // CHECK: call void @_ZN5FieldD1Ev( |
59 | // CHECK: call void @_ZN4BaseD2Ev( |
60 | // CHECK: ret void |
61 | |