blob: 14e787940c20378c1c22209a5d3c655a4f8e713c [file] [log] [blame]
Anders Carlsson61814f62010-02-16 16:50:08 +00001// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm-only -fdump-vtable-layouts 2>&1 | FileCheck %s
2
3// A collection of big class hierarchies and their vtables.
4
5namespace Test1 {
6
7class C0
8{
9};
10class C1
11 : virtual public C0
12{
13 int k0;
14};
15class C2
16 : public C0
17 , virtual public C1
18{
19 int k0;
20};
21class C3
22 : virtual public C0
23 , virtual public C1
24 , public C2
25{
26 int k0;
27 int k1;
28 int k2;
29 int k3;
30};
31class C4
32 : public C2
33 , virtual public C3
34 , public C0
35{
36 int k0;
37};
38class C5
39 : public C0
40 , virtual public C4
41 , public C2
42 , public C1
43 , virtual public C3
44{
45 int k0;
46};
47class C6
48 : virtual public C3
49 , public C0
50 , public C5
51 , public C4
52 , public C1
53{
54 int k0;
55};
56class C7
57 : virtual public C5
58 , virtual public C6
59 , virtual public C3
60 , public C4
61 , virtual public C2
62{
63 int k0;
64 int k1;
65};
66class C8
67 : public C7
68 , public C5
69 , public C3
70 , virtual public C4
71 , public C1
72 , public C2
73{
74 int k0;
75 int k1;
76};
77
78// CHECK: Vtable for 'Test1::C9' (87 entries).
79// CHECK-NEXT: 0 | vbase_offset (344)
80// CHECK-NEXT: 1 | vbase_offset (312)
81// CHECK-NEXT: 2 | vbase_offset (184)
82// CHECK-NEXT: 3 | vbase_offset (168)
83// CHECK-NEXT: 4 | vbase_offset (120)
84// CHECK-NEXT: 5 | vbase_offset (48)
85// CHECK-NEXT: 6 | vbase_offset (148)
86// CHECK-NEXT: 7 | vbase_offset (152)
87// CHECK-NEXT: 8 | offset_to_top (0)
88// CHECK-NEXT: 9 | Test1::C9 RTTI
89// CHECK-NEXT: -- (Test1::C2, 0) vtable address --
90// CHECK-NEXT: -- (Test1::C9, 0) vtable address --
91// CHECK-NEXT: 10 | void Test1::C9::f()
92// CHECK-NEXT: 11 | vbase_offset (104)
93// CHECK-NEXT: 12 | vbase_offset (132)
94// CHECK-NEXT: 13 | vbase_offset (136)
95// CHECK-NEXT: 14 | offset_to_top (-16)
96// CHECK-NEXT: 15 | Test1::C9 RTTI
97// CHECK-NEXT: -- (Test1::C2, 16) vtable address --
98// CHECK-NEXT: -- (Test1::C4, 16) vtable address --
99// CHECK-NEXT: 16 | vbase_offset (72)
100// CHECK-NEXT: 17 | vbase_offset (120)
101// CHECK-NEXT: 18 | vbase_offset (100)
102// CHECK-NEXT: 19 | vbase_offset (104)
103// CHECK-NEXT: 20 | offset_to_top (-48)
104// CHECK-NEXT: 21 | Test1::C9 RTTI
105// CHECK-NEXT: -- (Test1::C2, 48) vtable address --
106// CHECK-NEXT: -- (Test1::C5, 48) vtable address --
107// CHECK-NEXT: -- (Test1::C6, 48) vtable address --
108// CHECK-NEXT: 22 | vbase_offset (84)
109// CHECK-NEXT: 23 | offset_to_top (-64)
110// CHECK-NEXT: 24 | Test1::C9 RTTI
111// CHECK-NEXT: -- (Test1::C1, 64) vtable address --
112// CHECK-NEXT: 25 | vbase_offset (32)
113// CHECK-NEXT: 26 | vbase_offset (60)
114// CHECK-NEXT: 27 | vbase_offset (64)
115// CHECK-NEXT: 28 | offset_to_top (-88)
116// CHECK-NEXT: 29 | Test1::C9 RTTI
117// CHECK-NEXT: -- (Test1::C2, 88) vtable address --
118// CHECK-NEXT: -- (Test1::C4, 88) vtable address --
119// CHECK-NEXT: 30 | vbase_offset (44)
120// CHECK-NEXT: 31 | offset_to_top (-104)
121// CHECK-NEXT: 32 | Test1::C9 RTTI
122// CHECK-NEXT: -- (Test1::C1, 104) vtable address --
123// CHECK-NEXT: 33 | vbase_offset (28)
124// CHECK-NEXT: 34 | vbase_offset (32)
125// CHECK-NEXT: 35 | offset_to_top (-120)
126// CHECK-NEXT: 36 | Test1::C9 RTTI
127// CHECK-NEXT: -- (Test1::C2, 120) vtable address --
128// CHECK-NEXT: -- (Test1::C3, 120) vtable address --
129// CHECK-NEXT: 37 | vbase_offset (-4)
130// CHECK-NEXT: 38 | offset_to_top (-152)
131// CHECK-NEXT: 39 | Test1::C9 RTTI
132// CHECK-NEXT: -- (Test1::C1, 152) vtable address --
133// CHECK-NEXT: 40 | vbase_offset (-48)
134// CHECK-NEXT: 41 | vbase_offset (-20)
135// CHECK-NEXT: 42 | vbase_offset (-16)
136// CHECK-NEXT: 43 | offset_to_top (-168)
137// CHECK-NEXT: 44 | Test1::C9 RTTI
138// CHECK-NEXT: -- (Test1::C2, 168) vtable address --
139// CHECK-NEXT: -- (Test1::C4, 168) vtable address --
140// CHECK-NEXT: 45 | vbase_offset (160)
141// CHECK-NEXT: 46 | vbase_offset (-136)
142// CHECK-NEXT: 47 | vbase_offset (-16)
143// CHECK-NEXT: 48 | vbase_offset (128)
144// CHECK-NEXT: 49 | vbase_offset (-64)
145// CHECK-NEXT: 50 | vbase_offset (-36)
146// CHECK-NEXT: 51 | vbase_offset (-32)
147// CHECK-NEXT: 52 | offset_to_top (-184)
148// CHECK-NEXT: 53 | Test1::C9 RTTI
149// CHECK-NEXT: -- (Test1::C2, 184) vtable address --
150// CHECK-NEXT: -- (Test1::C4, 184) vtable address --
151// CHECK-NEXT: -- (Test1::C7, 184) vtable address --
152// CHECK-NEXT: -- (Test1::C8, 184) vtable address --
153// CHECK-NEXT: 54 | vbase_offset (-88)
154// CHECK-NEXT: 55 | vbase_offset (-40)
155// CHECK-NEXT: 56 | vbase_offset (-60)
156// CHECK-NEXT: 57 | vbase_offset (-56)
157// CHECK-NEXT: 58 | offset_to_top (-208)
158// CHECK-NEXT: 59 | Test1::C9 RTTI
159// CHECK-NEXT: -- (Test1::C2, 208) vtable address --
160// CHECK-NEXT: -- (Test1::C5, 208) vtable address --
161// CHECK-NEXT: 60 | vbase_offset (-76)
162// CHECK-NEXT: 61 | offset_to_top (-224)
163// CHECK-NEXT: 62 | Test1::C9 RTTI
164// CHECK-NEXT: -- (Test1::C1, 224) vtable address --
165// CHECK-NEXT: 63 | vbase_offset (-92)
166// CHECK-NEXT: 64 | vbase_offset (-88)
167// CHECK-NEXT: 65 | offset_to_top (-240)
168// CHECK-NEXT: 66 | Test1::C9 RTTI
169// CHECK-NEXT: -- (Test1::C2, 240) vtable address --
170// CHECK-NEXT: -- (Test1::C3, 240) vtable address --
171// CHECK-NEXT: 67 | vbase_offset (-124)
172// CHECK-NEXT: 68 | offset_to_top (-272)
173// CHECK-NEXT: 69 | Test1::C9 RTTI
174// CHECK-NEXT: -- (Test1::C1, 272) vtable address --
175// CHECK-NEXT: 70 | vbase_offset (-140)
176// CHECK-NEXT: 71 | vbase_offset (-136)
177// CHECK-NEXT: 72 | offset_to_top (-288)
178// CHECK-NEXT: 73 | Test1::C9 RTTI
179// CHECK-NEXT: -- (Test1::C2, 288) vtable address --
180// CHECK-NEXT: 74 | vbase_offset (-192)
181// CHECK-NEXT: 75 | vbase_offset (-144)
182// CHECK-NEXT: 76 | vbase_offset (-164)
183// CHECK-NEXT: 77 | vbase_offset (-160)
184// CHECK-NEXT: 78 | offset_to_top (-312)
185// CHECK-NEXT: 79 | Test1::C9 RTTI
186// CHECK-NEXT: -- (Test1::C2, 312) vtable address --
187// CHECK-NEXT: -- (Test1::C5, 312) vtable address --
188// CHECK-NEXT: 80 | vbase_offset (-180)
189// CHECK-NEXT: 81 | offset_to_top (-328)
190// CHECK-NEXT: 82 | Test1::C9 RTTI
191// CHECK-NEXT: -- (Test1::C1, 328) vtable address --
192// CHECK-NEXT: 83 | vbase_offset (-196)
193// CHECK-NEXT: 84 | vbase_offset (-192)
194// CHECK-NEXT: 85 | offset_to_top (-344)
195// CHECK-NEXT: 86 | Test1::C9 RTTI
196class C9
197 : virtual public C6
198 , public C2
199 , public C4
200 , virtual public C8
201{
202 int k0;
203 int k1;
204 int k2;
205 int k3;
206 virtual void f();
207};
208void C9::f() { }
209
210}