blob: d5857bc9aff0ea2925381f817e5a168b43b60e75 [file] [log] [blame]
Mike Stump49520942009-08-11 04:03:59 +00001// RUN: clang-cc -triple x86_64-apple-darwin -std=c++0x -O0 -S %s -o %t-64.s &&
Mike Stump06758d02009-08-04 20:37:29 +00002// RUN: FileCheck -check-prefix LP64 --input-file=%t-64.s %s &&
Mike Stump49520942009-08-11 04:03:59 +00003// RUN: clang-cc -triple i386-apple-darwin -std=c++0x -O0 -S %s -o %t-32.s &&
Mike Stump06758d02009-08-04 20:37:29 +00004// RUN: FileCheck -check-prefix LP32 -input-file=%t-32.s %s &&
Mike Stump49520942009-08-11 04:03:59 +00005
6// RUN: clang-cc -triple x86_64-apple-darwin -std=c++0x -O3 -S %s -o %t-O3-64.s &&
7// RUN: FileCheck -check-prefix LPOPT64 --input-file=%t-O3-64.s %s &&
8// RUN: clang-cc -triple i386-apple-darwin -std=c++0x -O3 -S %s -o %t-O3-32.s &&
9// RUN: FileCheck -check-prefix LPOPT32 -input-file=%t-O3-32.s %s &&
10
Mike Stump06758d02009-08-04 20:37:29 +000011// RUN: true
Mike Stump3dee6ef2009-07-30 00:22:38 +000012
Mike Stump104ffaa2009-08-04 21:58:42 +000013struct B {
14 virtual void bar1();
15 virtual void bar2();
Mike Stump2effeca2009-08-06 00:38:46 +000016 int b;
Mike Stump104ffaa2009-08-04 21:58:42 +000017};
Mike Stump6f376332009-08-05 22:37:18 +000018void B::bar1() { }
19void B::bar2() { }
20
21struct C {
22 virtual void bee1();
23 virtual void bee2();
24};
25void C::bee1() { }
26void C::bee2() { }
Mike Stump104ffaa2009-08-04 21:58:42 +000027
Mike Stump2effeca2009-08-06 00:38:46 +000028struct D {
29 virtual void boo();
30};
31void D::boo() { }
Mike Stump104ffaa2009-08-04 21:58:42 +000032
Mike Stumpc5708d92009-08-06 14:12:47 +000033struct D1 {
34 virtual void bar();
Mike Stump02cf1e22009-08-06 23:48:32 +000035 virtual void bar2();
36 virtual void bar3();
37 virtual void bar4();
38 virtual void bar5();
Mike Stumpc5708d92009-08-06 14:12:47 +000039 void *d1;
40};
41void D1::bar() { }
42
43class F : virtual public D1, virtual public D {
44public:
45 virtual void foo();
46 void *f;
47};
48void F::foo() { }
49
50int j;
51void test2() {
52 F f;
53 static int sz = (char *)(&f.f) - (char *)(&f);
54 j = sz;
Mike Stump37148f42009-08-06 14:16:19 +000055 // FIXME: These should result in a frontend constant a la fold, no run time
56 // initializer
Mike Stump49520942009-08-11 04:03:59 +000057 // CHECK-LPOPT32: movl $4, __ZZ5test2vE2sz
58 // CHECK-LPOPT64: movl $8, __ZZ5test2vE2sz(%rip)
Mike Stumpc5708d92009-08-06 14:12:47 +000059}
Mike Stump8a12b562009-08-06 15:50:11 +000060
Mike Stumpc5708d92009-08-06 14:12:47 +000061static_assert(sizeof(F) == sizeof(void*)*4, "invalid vbase size");
62
Mike Stump2effeca2009-08-06 00:38:46 +000063struct E {
64 int e;
65};
66
67static_assert (sizeof (C) == (sizeof(void *)), "vtable pointer layout");
68
Mike Stumpeb19fa92009-08-06 13:41:24 +000069class A : public E, public B, public C {
Mike Stump3dee6ef2009-07-30 00:22:38 +000070public:
Mike Stump06758d02009-08-04 20:37:29 +000071 virtual void foo1();
72 virtual void foo2();
73 A() { }
Mike Stump2effeca2009-08-06 00:38:46 +000074 int a;
75} *ap;
Mike Stump6f376332009-08-05 22:37:18 +000076void A::foo1() { }
77void A::foo2() { }
Mike Stump3dee6ef2009-07-30 00:22:38 +000078
Mike Stump06758d02009-08-04 20:37:29 +000079int main() {
80 A a;
Mike Stump26899b02009-08-05 22:48:36 +000081 B b;
Mike Stump2effeca2009-08-06 00:38:46 +000082 ap->e = 1;
83 ap->b = 2;
Mike Stump06758d02009-08-04 20:37:29 +000084}
85
Mike Stump2effeca2009-08-06 00:38:46 +000086// CHECK-LP32: main:
87// CHECK-LP32: movl $1, 8(%eax)
88// CHECK-LP32: movl $2, 4(%eax)
89
90// CHECK-LP64: main:
91// CHECK-LP64: movl $1, 12(%rax)
92// CHECK-LP64: movl $2, 8(%rax)
93
Mike Stump49520942009-08-11 04:03:59 +000094
Mike Stump94d0bce2009-08-13 00:34:14 +000095struct test6_B2 { virtual void funcB2(); char b[1000]; };
96struct test6_B1 : virtual test6_B2 { virtual void funcB1(); };
97
98struct test6_D : test6_B2, virtual test6_B1 {
99};
100
101// CEHCK-LP32: .zerofill __DATA, __common, _d6, 2012, 4
102// CHECK-LP64: .zerofill __DATA, __common, _d6, 2024, 4
103
Mike Stump78846782009-08-13 23:33:29 +0000104struct test7_B2 { virtual void funcB2(); };
105struct test7_B1 : virtual test7_B2 { virtual void funcB1(); };
106
107struct test7_D : test7_B2, virtual test7_B1 {
108};
109
110// CEHCK-LP32: .zerofill __DATA, __common, _d7, 8, 3
111// CHECK-LP64: .zerofill __DATA, __common, _d7, 16, 3
Mike Stump94d0bce2009-08-13 00:34:14 +0000112
113
Mike Stump49520942009-08-11 04:03:59 +0000114struct test3_B3 { virtual void funcB3(); };
115struct test3_B2 : virtual test3_B3 { virtual void funcB2(); };
116struct test3_B1 : virtual test3_B2 { virtual void funcB1(); };
117
118struct test3_D : virtual test3_B1 {
119 virtual void funcD() { }
120};
121
122// CHECK-LP32:__ZTV7test3_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000123// CHECK-LP32-NEXT: .space 4
124// CHECK-LP32-NEXT: .space 4
125// CHECK-LP32-NEXT: .space 4
126// CHECK-LP32-NEXT: .space 4
127// CHECK-LP32-NEXT: .space 4
128// CHECK-LP32-NEXT: .space 4
129// CHECK-LP32-NEXT: .space 4
Mike Stump49520942009-08-11 04:03:59 +0000130// CHECK-LP32: .long __ZTI7test3_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000131// CHECK-LP32-NEXT: .long __ZN8test3_B36funcB3Ev
132// CHECK-LP32-NEXT: .long __ZN8test3_B26funcB2Ev
133// CHECK-LP32-NEXT: .long __ZN8test3_B16funcB1Ev
134// CHECK-LP32-NEXT: .long __ZN7test3_D5funcDEv
Mike Stump49520942009-08-11 04:03:59 +0000135
136// CHECK-LP64:__ZTV7test3_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000137// CHECK-LP64-NEXT: .space 8
138// CHECK-LP64-NEXT: .space 8
139// CHECK-LP64-NEXT: .space 8
140// CHECK-LP64-NEXT: .space 8
141// CHECK-LP64-NEXT: .space 8
142// CHECK-LP64-NEXT: .space 8
143// CHECK-LP64-NEXT: .space 8
Mike Stump49520942009-08-11 04:03:59 +0000144// CHECK-LP64: .quad __ZTI7test3_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000145// CHECK-LP64-NEXT: .quad __ZN8test3_B36funcB3Ev
146// CHECK-LP64-NEXT: .quad __ZN8test3_B26funcB2Ev
147// CHECK-LP64-NEXT: .quad __ZN8test3_B16funcB1Ev
148// CHECK-LP64-NEXT: .quad __ZN7test3_D5funcDEv
Mike Stump49520942009-08-11 04:03:59 +0000149
Mike Stump34fae9c2009-08-12 18:50:26 +0000150struct test4_D : virtual B, virtual C {
151};
152
153// CHECK-LP32:__ZTV7test4_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000154// CHECK-LP32-NEXT: .space 4
155// CHECK-LP32-NEXT: .long 4
156// CHECK-LP32-NEXT: .space 4
157// CHECK-LP32-NEXT: .space 4
158// CHECK-LP32-NEXT: .space 4
159// CHECK-LP32-NEXT: .long __ZTI7test4_D
160// CHECK-LP32-NEXT: .long __ZN1C4bee1Ev
161// CHECK-LP32-NEXT: .long __ZN1C4bee2Ev
162// CHECK-LP32-NEXT: .space 4
163// CHECK-LP32-NEXT: .space 4
164// CHECK-LP32-NEXT: .long 4294967292
165// CHECK-LP32-NEXT: .long __ZTI7test4_D
166// CHECK-LP32-NEXT: .long __ZN1B4bar1Ev
167// CHECK-LP32-NEXT: .long __ZN1B4bar2Ev
Mike Stump34fae9c2009-08-12 18:50:26 +0000168
169// CHECK-LP64:__ZTV7test4_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000170// CHECK-LP64-NEXT: .space 8
171// CHECK-LP64-NEXT: .quad 8
172// CHECK-LP64-NEXT: .space 8
173// CHECK-LP64-NEXT: .space 8
174// CHECK-LP64-NEXT: .space 8
175// CHECK-LP64-NEXT: .quad __ZTI7test4_D
176// CHECK-LP64-NEXT: .quad __ZN1C4bee1Ev
177// CHECK-LP64-NEXT: .quad __ZN1C4bee2Ev
178// CHECK-LP64-NEXT: .space 8
179// CHECK-LP64-NEXT: .space 8
180// CHECK-LP64-NEXT: .quad 18446744073709551608
181// CHECK-LP64-NEXT: .quad __ZTI7test4_D
182// CHECK-LP64-NEXT: .quad __ZN1B4bar1Ev
183// CHECK-LP64-NEXT: .quad __ZN1B4bar2Ev
Mike Stump34fae9c2009-08-12 18:50:26 +0000184
Mike Stump49520942009-08-11 04:03:59 +0000185
Mike Stumpd76264e2009-08-12 21:50:08 +0000186struct test5_B3 { virtual void funcB3(); };
187struct test5_B2 : virtual test5_B3 { virtual void funcB2(); };
188struct test5_B1 : virtual test5_B2 { virtual void funcB1(); };
189
190struct test5_B23 { virtual void funcB23(); };
191struct test5_B22 : virtual test5_B23 { virtual void funcB22(); };
192struct test5_B21 : virtual test5_B22 { virtual void funcB21(); };
193
194
195struct B232 { virtual void funcB232(); };
196struct B231 { virtual void funcB231(); };
197
198struct test5_B33 { virtual void funcB33(); };
199struct test5_B32 : virtual test5_B33, virtual B232 { virtual void funcB32(); };
200struct test5_B31 : virtual test5_B32, virtual B231 { virtual void funcB31(); };
201
202struct test5_D : virtual test5_B1, virtual test5_B21, virtual test5_B31 {
203 virtual void funcD() { }
204};
205
206// CHECK-LP32:__ZTV7test5_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000207// CHECK-LP32-NEXT: .long 16
208// CHECK-LP32-NEXT: .long 12
Mike Stumpfe3010d2009-08-16 19:04:13 +0000209// CHECK-LP32-NEXT: .long 8
210// CHECK-LP32-NEXT: .long 8
211// CHECK-LP32-NEXT: .long 8
212// CHECK-LP32-NEXT: .long 4
213// CHECK-LP32-NEXT: .long 4
214// CHECK-LP32-NEXT: .long 4
215// CHECK-LP32-NEXT: .space 4
Mike Stump4ec04c42009-08-16 02:40:14 +0000216// CHECK-LP32-NEXT: .space 4
217// CHECK-LP32-NEXT: .space 4
218// CHECK-LP32-NEXT: .space 4
219// CHECK-LP32-NEXT: .space 4
220// CHECK-LP32-NEXT: .space 4
221// CHECK-LP32-NEXT: .space 4
Mike Stumpd76264e2009-08-12 21:50:08 +0000222// CHECK-LP32: .long __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000223// CHECK-LP32-NEXT: .long __ZN8test5_B36funcB3Ev
224// CHECK-LP32-NEXT: .long __ZN8test5_B26funcB2Ev
225// CHECK-LP32-NEXT: .long __ZN8test5_B16funcB1Ev
226// CHECK-LP32-NEXT: .long __ZN7test5_D5funcDEv
Mike Stump4ec04c42009-08-16 02:40:14 +0000227// CHECK-LP32-NEXT: .space 4
228// CHECK-LP32-NEXT: .space 4
229// CHECK-LP32-NEXT: .space 4
230// CHECK-LP32-NEXT: .space 4
Mike Stumpb46c92d2009-08-19 02:06:38 +0000231// CHECK-LP32-NEXT .space 4 FIXME
Mike Stumpfe3010d2009-08-16 19:04:13 +0000232// CHECK-LP32: .long 4294967292
233// CHECK-LP32-NEXT: .long __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000234// CHECK-LP32-NEXT: .long __ZN9test5_B237funcB23Ev
235// CHECK-LP32-NEXT: .long __ZN9test5_B227funcB22Ev
236// CHECK-LP32-NEXT: .long __ZN9test5_B217funcB21Ev
Mike Stumpd76264e2009-08-12 21:50:08 +0000237// CHECK-LP32 .space 4
Mike Stumpb46c92d2009-08-19 02:06:38 +0000238// CHECK-LP32 .long 8 FIXME
Mike Stumpd76264e2009-08-12 21:50:08 +0000239// CHECK-LP32: .space 4
Mike Stumpb46c92d2009-08-19 02:06:38 +0000240// CHECK-LP32-NEXT .space 4 FIXME
Mike Stump276b9f12009-08-16 01:46:26 +0000241// CHECK-LP32: .long 4
Mike Stump4ec04c42009-08-16 02:40:14 +0000242// CHECK-LP32-NEXT: .space 4
243// CHECK-LP32-NEXT: .space 4
Mike Stump9c88d982009-08-19 13:36:31 +0000244// CHECK-LP32-NEXT: .long 4294967288
Mike Stumpfe3010d2009-08-16 19:04:13 +0000245// CHECK-LP32-NEXT: .long __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000246// CHECK-LP32-NEXT: .long __ZN9test5_B337funcB33Ev
247// CHECK-LP32-NEXT: .long __ZN9test5_B327funcB32Ev
248// CHECK-LP32-NEXT: .long __ZN9test5_B317funcB31Ev
249// CHECK-LP32-NEXT: .space 4
250// CHECK-LP32-NEXT: .long 4294967284
251// CHECK-LP32-NEXT: .long __ZTI7test5_D
252// CHECK-LP32-NEXT: .long __ZN4B2328funcB232Ev
253// CHECK-LP32-NEXT: .space 4
254// CHECK-LP32-NEXT:.long 4294967280
255// CHECK-LP32-NEXT: .long __ZTI7test5_D
256// CHECK-LP32-NEXT: .long __ZN4B2318funcB231Ev
Mike Stumpd76264e2009-08-12 21:50:08 +0000257
258// CHECK-LP64:__ZTV7test5_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000259// CHECK-LP64-NEXT: .quad 32
260// CHECK-LP64-NEXT: .quad 24
Mike Stumpfe3010d2009-08-16 19:04:13 +0000261// CHECK-LP64-NEXT: .quad 16
262// CHECK-LP64-NEXT: .quad 16
263// CHECK-LP64-NEXT: .quad 16
264// CHECK-LP64-NEXT: .quad 8
265// CHECK-LP64-NEXT: .quad 8
266// CHECK-LP64-NEXT: .quad 8
267// CHECK-LP64-NEXT: .space 8
Mike Stump4ec04c42009-08-16 02:40:14 +0000268// CHECK-LP64-NEXT: .space 8
269// CHECK-LP64-NEXT: .space 8
270// CHECK-LP64-NEXT: .space 8
271// CHECK-LP64-NEXT: .space 8
272// CHECK-LP64-NEXT: .space 8
273// CHECK-LP64-NEXT: .space 8
Mike Stumpd76264e2009-08-12 21:50:08 +0000274// CHECK-LP64: .quad __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000275// CHECK-LP64-NEXT: .quad __ZN8test5_B36funcB3Ev
276// CHECK-LP64-NEXT: .quad __ZN8test5_B26funcB2Ev
277// CHECK-LP64-NEXT: .quad __ZN8test5_B16funcB1Ev
278// CHECK-LP64-NEXT: .quad __ZN7test5_D5funcDEv
Mike Stump4ec04c42009-08-16 02:40:14 +0000279// CHECK-LP64-NEXT: .space 8
280// CHECK-LP64-NEXT: .space 8
281// CHECK-LP64-NEXT: .space 8
282// CHECK-LP64-NEXT: .space 8
Mike Stumpb46c92d2009-08-19 02:06:38 +0000283// CHECK-LP64-NEXT .space 8 FIXME
Mike Stumpfe3010d2009-08-16 19:04:13 +0000284// CHECK-LP64: .quad 18446744073709551608
285// CHECK-LP64-NEXT: .quad __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000286// CHECK-LP64-NEXT: .quad __ZN9test5_B237funcB23Ev
287// CHECK-LP64-NEXT: .quad __ZN9test5_B227funcB22Ev
288// CHECK-LP64-NEXT: .quad __ZN9test5_B217funcB21Ev
Mike Stumpd76264e2009-08-12 21:50:08 +0000289// CHECK-LP64 .space 8
Mike Stumpb46c92d2009-08-19 02:06:38 +0000290// CHECK-LP64 .quad 16 FIXME
Mike Stumpd76264e2009-08-12 21:50:08 +0000291// CHECK-LP64: .space 8
Mike Stumpb46c92d2009-08-19 02:06:38 +0000292// CHECK-LP64-NEXT .space 8 FIXME
Mike Stump276b9f12009-08-16 01:46:26 +0000293// CHECK-LP64: .quad 8
Mike Stump4ec04c42009-08-16 02:40:14 +0000294// CHECK-LP64-NEXT: .space 8
295// CHECK-LP64-NEXT: .space 8
Mike Stump9c88d982009-08-19 13:36:31 +0000296// CHECK-LP64-NEXT: .quad 18446744073709551600
Mike Stumpfe3010d2009-08-16 19:04:13 +0000297// CHECK-LP64-NEXT: .quad __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000298// CHECK-LP64-NEXT: .quad __ZN9test5_B337funcB33Ev
299// CHECK-LP64-NEXT: .quad __ZN9test5_B327funcB32Ev
300// CHECK-LP64-NEXT: .quad __ZN9test5_B317funcB31Ev
301// CHECK-LP64-NEXT: .space 8
302// CHECK-LP64-NEXT: .quad 18446744073709551592
303// CHECK-LP64-NEXT: .quad __ZTI7test5_D
304// CHECK-LP64-NEXT: .quad __ZN4B2328funcB232Ev
305// CHECK-LP64-NEXT: .space 8
306// CHECK-LP64-NEXT:.quad 18446744073709551584
307// CHECK-LP64-NEXT: .quad __ZTI7test5_D
308// CHECK-LP64-NEXT: .quad __ZN4B2318funcB231Ev
Mike Stumpd76264e2009-08-12 21:50:08 +0000309
Mike Stump276b9f12009-08-16 01:46:26 +0000310struct test8_B1 {
311 virtual void ftest8_B1() { }
312};
313struct test8_B2aa {
314 virtual void ftest8_B2aa() { }
315 int i;
316};
317struct test8_B2ab {
318 virtual void ftest8_B2ab() { }
319 int i;
320};
321struct test8_B2a : virtual test8_B2aa, virtual test8_B2ab {
322 virtual void ftest8_B2a() { }
323};
324struct test8_B2b {
325 virtual void ftest8_B2b() { }
326};
327struct test8_B2 : test8_B2a, test8_B2b {
328 virtual void ftest8_B2() { }
329};
330struct test8_B3 {
331 virtual void ftest8_B3() { }
332};
333class test8_D : test8_B1, test8_B2, test8_B3 {
Mike Stump09765ec2009-08-19 02:53:08 +0000334};
Mike Stump276b9f12009-08-16 01:46:26 +0000335
336// CHECK-LP32:__ZTV7test8_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000337// CHECK-LP32-NEXT: .long 24
338// CHECK-LP32-NEXT: .long 16
339// CHECK-LP32-NEXT: .space 4
Mike Stumpb46c92d2009-08-19 02:06:38 +0000340// CHECK-LP32-NEXT: .long __ZTI7test8_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000341// CHECK-LP32-NEXT: .long __ZN8test8_B19ftest8_B1Ev
342// CHECK-LP32-NEXT: .long 20
343// CHECK-LP32-NEXT: .long 12
Mike Stump276b9f12009-08-16 01:46:26 +0000344// CHECK-LP32: .long 4294967292
Mike Stump4ec04c42009-08-16 02:40:14 +0000345// CHECK-LP32-NEXT: .long __ZTI7test8_D
346// CHECK-LP32-NEXT: .long __ZN9test8_B2a10ftest8_B2aEv
347// CHECK-LP32-NEXT: .long __ZN8test8_B29ftest8_B2Ev
Mike Stumpb46c92d2009-08-19 02:06:38 +0000348// CHECK-LP32-NEXT: .long 4294967288
Mike Stump4ec04c42009-08-16 02:40:14 +0000349// CHECK-LP32-NEXT: .long __ZTI7test8_D
350// CHECK-LP32-NEXT: .long __ZN9test8_B2b10ftest8_B2bEv
Mike Stumpb46c92d2009-08-19 02:06:38 +0000351// CHECK-LP32-NEXT: .long 4294967284
Mike Stump4ec04c42009-08-16 02:40:14 +0000352// CHECK-LP32-NEXT: .long __ZTI7test8_D
353// CHECK-LP32-NEXT: .long __ZN8test8_B39ftest8_B3Ev
354// CHECK-LP32-NEXT: .space 4
355// CHECK-LP32-NEXT: .long 4294967280
356// CHECK-LP32-NEXT: .long __ZTI7test8_D
357// CHECK-LP32-NEXT: .long __ZN10test8_B2aa11ftest8_B2aaEv
358// CHECK-LP32-NEXT: .space 4
359// CHECK-LP32-NEXT: .long 4294967272
360// CHECK-LP32-NEXT: .long __ZTI7test8_D
361// CHECK-LP32-NEXT: .long __ZN10test8_B2ab11ftest8_B2abEv
Mike Stump276b9f12009-08-16 01:46:26 +0000362
363// CHECK-LP64:__ZTV7test8_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000364// CHECK-LP64-NEXT: .quad 48
365// CHECK-LP64-NEXT: .quad 32
366// CHECK-LP64-NEXT: .space 8
Mike Stumpb46c92d2009-08-19 02:06:38 +0000367// CHECK-LP64-NEXT: .quad __ZTI7test8_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000368// CHECK-LP64-NEXT: .quad __ZN8test8_B19ftest8_B1Ev
369// CHECK-LP64-NEXT: .quad 40
370// CHECK-LP64-NEXT: .quad 24
Mike Stump276b9f12009-08-16 01:46:26 +0000371// CHECK-LP64: .quad 18446744073709551608
Mike Stump4ec04c42009-08-16 02:40:14 +0000372// CHECK-LP64-NEXT: .quad __ZTI7test8_D
373// CHECK-LP64-NEXT: .quad __ZN9test8_B2a10ftest8_B2aEv
374// CHECK-LP64-NEXT: .quad __ZN8test8_B29ftest8_B2Ev
Mike Stumpb46c92d2009-08-19 02:06:38 +0000375// CHECK-LP64-NEXT: .quad 18446744073709551600
Mike Stump4ec04c42009-08-16 02:40:14 +0000376// CHECK-LP64-NEXT: .quad __ZTI7test8_D
377// CHECK-LP64-NEXT: .quad __ZN9test8_B2b10ftest8_B2bEv
Mike Stumpb46c92d2009-08-19 02:06:38 +0000378// CHECK-LP64-NEXT: .quad 18446744073709551592
Mike Stump4ec04c42009-08-16 02:40:14 +0000379// CHECK-LP64-NEXT: .quad __ZTI7test8_D
380// CHECK-LP64-NEXT: .quad __ZN8test8_B39ftest8_B3Ev
381// CHECK-LP64-NEXT: .space 8
382// CHECK-LP64-NEXT: .quad 18446744073709551584
383// CHECK-LP64-NEXT: .quad __ZTI7test8_D
384// CHECK-LP64-NEXT: .quad __ZN10test8_B2aa11ftest8_B2aaEv
385// CHECK-LP64-NEXT: .space 8
386// CHECK-LP64-NEXT: .quad 18446744073709551568
387// CHECK-LP64-NEXT: .quad __ZTI7test8_D
388// CHECK-LP64-NEXT: .quad __ZN10test8_B2ab11ftest8_B2abEv
Mike Stumpd76264e2009-08-12 21:50:08 +0000389
Mike Stump49520942009-08-11 04:03:59 +0000390
Mike Stump09765ec2009-08-19 02:53:08 +0000391struct test9_B3 { virtual void funcB3(); int i; };
392struct test9_B2 : virtual test9_B3 { virtual void funcB2(); int i; };
393struct test9_B1 : virtual test9_B2 { virtual void funcB1(); int i; };
394
395struct test9_B23 { virtual void funcB23(); int i; };
396struct test9_B22 : virtual test9_B23 { virtual void funcB22(); int i; };
397struct test9_B21 : virtual test9_B22 { virtual void funcB21(); int i; };
398
399
400struct test9_B232 { virtual void funcB232(); int i; };
401struct test9_B231 { virtual void funcB231(); int i; };
402
403struct test9_B33 { virtual void funcB33(); int i; };
404struct test9_B32 : virtual test9_B33, virtual test9_B232 { virtual void funcB32(); int i; };
405struct test9_B31 : virtual test9_B32, virtual test9_B231 { virtual void funcB31(); int i; };
406
407struct test9_D : virtual test9_B1, virtual test9_B21, virtual test9_B31 {
408 virtual void funcD() { }
409};
410
411// CHECK-LP64: __ZTV7test9_D:
412// CHECK-LP64-NEXT: .quad 168
413// CHECK-LP64-NEXT: .quad 152
414// CHECK-LP64-NEXT: .quad 136
415// CHECK-LP64-NEXT: .quad 120
416// CHECK-LP64-NEXT: .quad 104
417// CHECK-LP64-NEXT: .quad 88
418// CHECK-LP64-NEXT: .quad 72
419// CHECK-LP64-NEXT: .quad 56
420// CHECK-LP64-NEXT: .quad 40
421// CHECK-LP64-NEXT: .quad 24
422// CHECK-LP64-NEXT: .quad 8
423// CHECK-LP64-NEXT: .space 8
424// CHECK-LP64-NEXT: .quad __ZTI7test9_D
425// CHECK-LP64-NEXT: .quad __ZN7test9_D5funcDEv
426// CHECK-LP64-NEXT: .space 8
427// CHECK-LP64-NEXT: .quad 32
428// CHECK-LP64-NEXT: .quad 16
429// CHECK-LP64-NEXT: .quad 18446744073709551608
430// CHECK-LP64-NEXT: .quad __ZTI7test9_D
431// CHECK-LP64-NEXT: .quad __ZN8test9_B16funcB1Ev
432// CHECK-LP64-NEXT: .space 8
433// CHECK-LP64-NEXT: .quad 16
434// CHECK-LP64-NEXT: .quad 18446744073709551592
435// CHECK-LP64-NEXT: .quad __ZTI7test9_D
436// CHECK-LP64-NEXT: .quad __ZN8test9_B26funcB2Ev
437// CHECK-LP64-NEXT: .space 8
438// CHECK-LP64-NEXT: .quad 18446744073709551576
439// CHECK-LP64-NEXT: .quad __ZTI7test9_D
440// CHECK-LP64-NEXT: .quad __ZN8test9_B36funcB3Ev
441// CHECK-LP64-NEXT: .space 8
442// CHECK-LP64-NEXT: .quad 32
443// CHECK-LP64-NEXT: .quad 16
444// CHECK-LP64-NEXT: .quad 18446744073709551560
445// CHECK-LP64-NEXT: .quad __ZTI7test9_D
446// CHECK-LP64-NEXT: .quad __ZN9test9_B217funcB21Ev
447// CHECK-LP64-NEXT: .space 8
448// CHECK-LP64-NEXT: .quad 16
449// CHECK-LP64-NEXT: .quad 18446744073709551544
450// CHECK-LP64-NEXT: .quad __ZTI7test9_D
451// CHECK-LP64-NEXT: .quad __ZN9test9_B227funcB22Ev
452// CHECK-LP64-NEXT: .space 8
453// CHECK-LP64-NEXT: .quad 18446744073709551528
454// CHECK-LP64-NEXT: .quad __ZTI7test9_D
455// CHECK-LP64-NEXT: .quad __ZN9test9_B237funcB23Ev
456// CHECK-LP64-NEXT: .space 8
457// CHECK-LP64-NEXT: .quad 64
458// CHECK-LP64-NEXT: .quad 48
459// CHECK-LP64-NEXT: .quad 32
460// CHECK-LP64-NEXT: .quad 16
461// CHECK-LP64-NEXT: .quad 18446744073709551512
462// CHECK-LP64-NEXT: .quad __ZTI7test9_D
463// CHECK-LP64-NEXT: .quad __ZN9test9_B317funcB31Ev
464// CHECK-LP64-NEXT: .space 8
465// CHECK-LP64-NEXT: .quad 32
466// CHECK-LP64-NEXT: .quad 16
467// CHECK-LP64-NEXT: .quad 18446744073709551496
468// CHECK-LP64-NEXT: .quad __ZTI7test9_D
469// CHECK-LP64-NEXT: .quad __ZN9test9_B327funcB32Ev
470// CHECK-LP64-NEXT: .space 8
471// CHECK-LP64-NEXT: .quad 18446744073709551480
472// CHECK-LP64-NEXT: .quad __ZTI7test9_D
473// CHECK-LP64-NEXT: .quad __ZN9test9_B337funcB33Ev
474// CHECK-LP64-NEXT: .space 8
475// CHECK-LP64-NEXT: .quad 18446744073709551464
476// CHECK-LP64-NEXT: .quad __ZTI7test9_D
477// CHECK-LP64-NEXT: .quad __ZN10test9_B2328funcB232Ev
478// CHECK-LP64-NEXT: .space 8
479// CHECK-LP64-NEXT: .quad 18446744073709551448
480// CHECK-LP64-NEXT: .quad __ZTI7test9_D
481// CHECK-LP64-NEXT: .quad __ZN10test9_B2318funcB231Ev
482
483// CHECK-LP32: __ZTV7test9_D:
484// CHECK-LP32-NEXT: .long 84
485// CHECK-LP32-NEXT: .long 76
486// CHECK-LP32-NEXT: .long 68
487// CHECK-LP32-NEXT: .long 60
488// CHECK-LP32-NEXT: .long 52
489// CHECK-LP32-NEXT: .long 44
490// CHECK-LP32-NEXT: .long 36
491// CHECK-LP32-NEXT: .long 28
492// CHECK-LP32-NEXT: .long 20
493// CHECK-LP32-NEXT: .long 12
494// CHECK-LP32-NEXT: .long 4
495// CHECK-LP32-NEXT: .space 4
496// CHECK-LP32-NEXT: .long __ZTI7test9_D
497// CHECK-LP32-NEXT: .long __ZN7test9_D5funcDEv
498// CHECK-LP32-NEXT: .space 4
499// CHECK-LP32-NEXT: .long 16
500// CHECK-LP32-NEXT: .long 8
501// CHECK-LP32-NEXT: .long 4294967292
502// CHECK-LP32-NEXT: .long __ZTI7test9_D
503// CHECK-LP32-NEXT: .long __ZN8test9_B16funcB1Ev
504// CHECK-LP32-NEXT: .space 4
505// CHECK-LP32-NEXT: .long 8
506// CHECK-LP32-NEXT: .long 4294967284
507// CHECK-LP32-NEXT: .long __ZTI7test9_D
508// CHECK-LP32-NEXT: .long __ZN8test9_B26funcB2Ev
509// CHECK-LP32-NEXT: .space 4
510// CHECK-LP32-NEXT: .long 4294967276
511// CHECK-LP32-NEXT: .long __ZTI7test9_D
512// CHECK-LP32-NEXT: .long __ZN8test9_B36funcB3Ev
513// CHECK-LP32-NEXT: .space 4
514// CHECK-LP32-NEXT: .long 16
515// CHECK-LP32-NEXT: .long 8
516// CHECK-LP32-NEXT: .long 4294967268
517// CHECK-LP32-NEXT: .long __ZTI7test9_D
518// CHECK-LP32-NEXT: .long __ZN9test9_B217funcB21Ev
519// CHECK-LP32-NEXT: .space 4
520// CHECK-LP32-NEXT: .long 8
521// CHECK-LP32-NEXT: .long 4294967260
522// CHECK-LP32-NEXT: .long __ZTI7test9_D
523// CHECK-LP32-NEXT: .long __ZN9test9_B227funcB22Ev
524// CHECK-LP32-NEXT: .space 4
525// CHECK-LP32-NEXT: .long 4294967252
526// CHECK-LP32-NEXT: .long __ZTI7test9_D
527// CHECK-LP32-NEXT: .long __ZN9test9_B237funcB23Ev
528// CHECK-LP32-NEXT: .space 4
529// CHECK-LP32-NEXT: .long 32
530// CHECK-LP32-NEXT: .long 24
531// CHECK-LP32-NEXT: .long 16
532// CHECK-LP32-NEXT: .long 8
533// CHECK-LP32-NEXT: .long 4294967244
534// CHECK-LP32-NEXT: .long __ZTI7test9_D
535// CHECK-LP32-NEXT: .long __ZN9test9_B317funcB31Ev
536// CHECK-LP32-NEXT: .space 4
537// CHECK-LP32-NEXT: .long 16
538// CHECK-LP32-NEXT: .long 8
539// CHECK-LP32-NEXT: .long 4294967236
540// CHECK-LP32-NEXT: .long __ZTI7test9_D
541// CHECK-LP32-NEXT: .long __ZN9test9_B327funcB32Ev
542// CHECK-LP32-NEXT: .space 4
543// CHECK-LP32-NEXT: .long 4294967228
544// CHECK-LP32-NEXT: .long __ZTI7test9_D
545// CHECK-LP32-NEXT: .long __ZN9test9_B337funcB33Ev
546// CHECK-LP32-NEXT: .space 4
547// CHECK-LP32-NEXT: .long 4294967220
548// CHECK-LP32-NEXT: .long __ZTI7test9_D
549// CHECK-LP32-NEXT: .long __ZN10test9_B2328funcB232Ev
550// CHECK-LP32-NEXT: .space 4
551// CHECK-LP32-NEXT: .long 4294967212
552// CHECK-LP32-NEXT: .long __ZTI7test9_D
553// CHECK-LP32-NEXT: .long __ZN10test9_B2318funcB231Ev
554
555
Mike Stump49520942009-08-11 04:03:59 +0000556
Mike Stump26899b02009-08-05 22:48:36 +0000557// CHECK-LP64: __ZTV1B:
Mike Stumpb46c92d2009-08-19 02:06:38 +0000558// CHECK-LP64-NEXT: .space 8
559// CHECK-LP64-NEXT: .quad __ZTI1B
Mike Stump4ec04c42009-08-16 02:40:14 +0000560// CHECK-LP64-NEXT: .quad __ZN1B4bar1Ev
561// CHECK-LP64-NEXT: .quad __ZN1B4bar2Ev
Mike Stump26899b02009-08-05 22:48:36 +0000562
563// CHECK-LP32: __ZTV1B:
Mike Stumpb46c92d2009-08-19 02:06:38 +0000564// CHECK-LP32-NEXT: .space 4
565// CHECK-LP32-NEXT: .long __ZTI1B
Mike Stump4ec04c42009-08-16 02:40:14 +0000566// CHECK-LP32-NEXT: .long __ZN1B4bar1Ev
567// CHECK-LP32-NEXT: .long __ZN1B4bar2Ev
Mike Stump26899b02009-08-05 22:48:36 +0000568
Mike Stump06758d02009-08-04 20:37:29 +0000569// CHECK-LP64: __ZTV1A:
Mike Stump4ec04c42009-08-16 02:40:14 +0000570// CHECK-LP64-NEXT: .space 8
Mike Stumpb46c92d2009-08-19 02:06:38 +0000571// CHECK-LP64-NEXT: .quad __ZTI1A
Mike Stump4ec04c42009-08-16 02:40:14 +0000572// CHECK-LP64-NEXT: .quad __ZN1B4bar1Ev
573// CHECK-LP64-NEXT: .quad __ZN1B4bar2Ev
574// CHECK-LP64-NEXT: .quad __ZN1A4foo1Ev
575// CHECK-LP64-NEXT: .quad __ZN1A4foo2Ev
Mike Stumpb46c92d2009-08-19 02:06:38 +0000576// CHECK-LP64-NEXT: .quad 18446744073709551600
Mike Stump4ec04c42009-08-16 02:40:14 +0000577// CHECK-LP64-NEXT: .quad __ZTI1A
578// CHECK-LP64-NEXT: .quad __ZN1C4bee1Ev
579// CHECK-LP64-NEXT: .quad __ZN1C4bee2Ev
Mike Stump06758d02009-08-04 20:37:29 +0000580
581// CHECK-LP32: __ZTV1A:
Mike Stump4ec04c42009-08-16 02:40:14 +0000582// CHECK-LP32-NEXT: .space 4
Mike Stumpb46c92d2009-08-19 02:06:38 +0000583// CHECK-LP32-NEXT: .long __ZTI1A
Mike Stump4ec04c42009-08-16 02:40:14 +0000584// CHECK-LP32-NEXT: .long __ZN1B4bar1Ev
585// CHECK-LP32-NEXT: .long __ZN1B4bar2Ev
586// CHECK-LP32-NEXT: .long __ZN1A4foo1Ev
587// CHECK-LP32-NEXT: .long __ZN1A4foo2Ev
Mike Stumpb46c92d2009-08-19 02:06:38 +0000588// CHECK-LP32-NEXT: .long 4294967284
Mike Stump4ec04c42009-08-16 02:40:14 +0000589// CHECK-LP32-NEXT: .long __ZTI1A
590// CHECK-LP32-NEXT: .long __ZN1C4bee1Ev
591// CHECK-LP32-NEXT: .long __ZN1C4bee2Ev
Mike Stump8a12b562009-08-06 15:50:11 +0000592
Mike Stump928f1502009-08-07 19:00:50 +0000593// CHECK-LP32:__ZTV1F:
Mike Stump4ec04c42009-08-16 02:40:14 +0000594// CHECK-LP32-NEXT: .space 4
595// CHECK-LP32-NEXT: .long 8
596// CHECK-LP32-NEXT: .space 4
597// CHECK-LP32-NEXT: .space 4
Mike Stumpb46c92d2009-08-19 02:06:38 +0000598// CHECK-LP32-NEXT: .long __ZTI1F
Mike Stump4ec04c42009-08-16 02:40:14 +0000599// CHECK-LP32-NEXT: .long __ZN1D3booEv
600// CHECK-LP32-NEXT: .long __ZN1F3fooEv
601// CHECK-LP32-NEXT: .space 4
602// CHECK-LP32-NEXT: .space 4
603// CHECK-LP32-NEXT: .space 4
604// CHECK-LP32-NEXT: .space 4
605// CHECK-LP32-NEXT: .space 4
606// CHECK-LP32-NEXT: .long 4294967288
607// CHECK-LP32-NEXT: .long __ZTI1F
608// CHECK-LP32-NEXT: .long __ZN2D13barEv
609// CHECK-LP32-NEXT: .long __ZN2D14bar2Ev
610// CHECK-LP32-NEXT: .long __ZN2D14bar3Ev
611// CHECK-LP32-NEXT: .long __ZN2D14bar4Ev
612// CHECK-LP32-NEXT: .long __ZN2D14bar5Ev
Mike Stump8a12b562009-08-06 15:50:11 +0000613
614// CHECK-LP64: __ZTV1F:
Mike Stump4ec04c42009-08-16 02:40:14 +0000615// CHECK-LP64-NEXT: .space 8
616// CHECK-LP64-NEXT: .quad 16
617// CHECK-LP64-NEXT: .space 8
618// CHECK-LP64-NEXT: .space 8
Mike Stumpb46c92d2009-08-19 02:06:38 +0000619// CHECK-LP64-NEXT: .quad __ZTI1F
Mike Stump4ec04c42009-08-16 02:40:14 +0000620// CHECK-LP64-NEXT: .quad __ZN1D3booEv
621// CHECK-LP64-NEXT: .quad __ZN1F3fooEv
622// CHECK-LP64-NEXT: .space 8
623// CHECK-LP64-NEXT: .space 8
624// CHECK-LP64-NEXT: .space 8
625// CHECK-LP64-NEXT: .space 8
626// CHECK-LP64-NEXT: .space 8
627// CHECK-LP64-NEXT: .quad 18446744073709551600
628// CHECK-LP64-NEXT: .quad __ZTI1F
629// CHECK-LP64-NEXT: .quad __ZN2D13barEv
630// CHECK-LP64-NEXT: .quad __ZN2D14bar2Ev
631// CHECK-LP64-NEXT: .quad __ZN2D14bar3Ev
632// CHECK-LP64-NEXT: .quad __ZN2D14bar4Ev
633// CHECK-LP64-NEXT: .quad __ZN2D14bar5Ev
Mike Stump49520942009-08-11 04:03:59 +0000634
635
Mike Stump09765ec2009-08-19 02:53:08 +0000636test9_D d9;
637test8_D d8;
638
Mike Stumpd76264e2009-08-12 21:50:08 +0000639test5_D d5;
Mike Stump34fae9c2009-08-12 18:50:26 +0000640test4_D d4;
641test3_D d3;
Mike Stump78846782009-08-13 23:33:29 +0000642
643test6_D d6;
644test7_D d7;