blob: cd0d24fa708aef6572c30e112452ce53595e76b1 [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 Stumpc902d222009-11-03 16:59:27 +000094// FIXME: This is the wrong thunk, but until these issues are fixed, better
95// than nothing.
96// CHECK-LP64: __ZTcvn16_n72_v16_n32_N8test16_D4foo1Ev27:
97// CHECK-LP64-NEXT:Leh_func_begin33:
98// CHECK-LP64-NEXT: subq $24, %rsp
99// CHECK-LP64-NEXT:Llabel33:
100// CHECK-LP64-NEXT: movq %rdi, %rax
101// CHECK-LP64-NEXT: movq %rax, 8(%rsp)
102// CHECK-LP64-NEXT: movq 8(%rsp), %rax
103// CHECK-LP64-NEXT: movq %rax, %rcx
104// CHECK-LP64-NEXT: movabsq $-16, %rdx
105// CHECK-LP64-NEXT: addq %rdx, %rcx
106// CHECK-LP64-NEXT: movq -16(%rax), %rax
107// CHECK-LP64-NEXT: movq -72(%rax), %rax
108// CHECK-LP64-NEXT: addq %rax, %rcx
109// CHECK-LP64-NEXT: movq %rcx, %rax
110// CHECK-LP64-NEXT: movq %rax, %rdi
111// CHECK-LP64-NEXT: call __ZN8test16_D4foo1Ev
112// CHECK-LP64-NEXT: movq %rax, %rcx
113// CHECK-LP64-NEXT: movabsq $16, %rdx
114// CHECK-LP64-NEXT: addq %rdx, %rcx
115// CHECK-LP64-NEXT: movq 16(%rax), %rax
116// CHECK-LP64-NEXT: movq -32(%rax), %rax
117// CHECK-LP64-NEXT: addq %rax, %rcx
118// CHECK-LP64-NEXT: movq %rcx, %rax
119// CHECK-LP64-NEXT: movq %rax, 16(%rsp)
120// CHECK-LP64-NEXT: movq 16(%rsp), %rax
121// CHECK-LP64-NEXT: addq $24, %rsp
122// CHECK-LP64-NEXT: ret
123
Mike Stumpf0070db2009-08-26 20:46:33 +0000124struct test12_A {
125 virtual void foo0() { }
126 virtual void foo();
127} *test12_pa;
128
129struct test12_B : public test12_A {
130 virtual void foo() { }
131} *test12_pb;
132
133struct test12_D : public test12_B {
134} *test12_pd;
135void test12_foo() {
136 test12_pa->foo0();
137 test12_pb->foo0();
138 test12_pd->foo0();
139 test12_pa->foo();
140 test12_pb->foo();
141 test12_pd->foo();
142 test12_pa->test12_A::foo();
143}
144
145// CHECK-LPOPT32:__Z10test12_foov:
146// CHECK-LPOPT32: movl _test12_pa, %eax
147// CHECK-LPOPT32-NEXT: movl (%eax), %ecx
148// CHECK-LPOPT32-NEXT: movl %eax, (%esp)
149// CHECK-LPOPT32-NEXT: call *(%ecx)
150// CHECK-LPOPT32-NEXT: movl _test12_pb, %eax
151// CHECK-LPOPT32-NEXT: movl (%eax), %ecx
152// CHECK-LPOPT32-NEXT: movl %eax, (%esp)
153// CHECK-LPOPT32-NEXT: call *(%ecx)
154// CHECK-LPOPT32-NEXT: movl _test12_pd, %eax
155// CHECK-LPOPT32-NEXT: movl (%eax), %ecx
156// CHECK-LPOPT32-NEXT: movl %eax, (%esp)
157// CHECK-LPOPT32-NEXT: call *(%ecx)
158// CHECK-LPOPT32-NEXT: movl _test12_pa, %eax
159// CHECK-LPOPT32-NEXT: movl (%eax), %ecx
160// CHECK-LPOPT32-NEXT: movl %eax, (%esp)
161// CHECK-LPOPT32-NEXT: call *4(%ecx)
162// CHECK-LPOPT32-NEXT: movl _test12_pb, %eax
163// CHECK-LPOPT32-NEXT: movl (%eax), %ecx
164// CHECK-LPOPT32-NEXT: movl %eax, (%esp)
165// CHECK-LPOPT32-NEXT: call *4(%ecx)
166// CHECK-LPOPT32-NEXT: movl _test12_pd, %eax
167// CHECK-LPOPT32-NEXT: movl (%eax), %ecx
168// CHECK-LPOPT32-NEXT: movl %eax, (%esp)
169// CHECK-LPOPT32-NEXT: call *4(%ecx)
Mike Stump63bb7c22009-08-26 23:38:08 +0000170// CHECK-LPOPT32-NEXT: movl _test12_pa, %eax
171// CHECK-LPOPT32-NEXT: movl %eax, (%esp)
172// CHECK-LPOPT32-NEXT: call L__ZN8test12_A3fooEv$stub
Mike Stumpf0070db2009-08-26 20:46:33 +0000173
174// CHECK-LPOPT64:__Z10test12_foov:
175// CHECK-LPOPT64: movq _test12_pa(%rip), %rdi
176// CHECK-LPOPT64-NEXT: movq (%rdi), %rax
177// CHECK-LPOPT64-NEXT: call *(%rax)
178// CHECK-LPOPT64-NEXT: movq _test12_pb(%rip), %rdi
179// CHECK-LPOPT64-NEXT: movq (%rdi), %rax
180// CHECK-LPOPT64-NEXT: call *(%rax)
181// CHECK-LPOPT64-NEXT: movq _test12_pd(%rip), %rdi
182// CHECK-LPOPT64-NEXT: movq (%rdi), %rax
183// CHECK-LPOPT64-NEXT: call *(%rax)
184// CHECK-LPOPT64-NEXT: movq _test12_pa(%rip), %rdi
185// CHECK-LPOPT64-NEXT: movq (%rdi), %rax
186// CHECK-LPOPT64-NEXT: call *8(%rax)
187// CHECK-LPOPT64-NEXT: movq _test12_pb(%rip), %rdi
188// CHECK-LPOPT64-NEXT: movq (%rdi), %rax
189// CHECK-LPOPT64-NEXT: call *8(%rax)
190// CHECK-LPOPT64-NEXT: movq _test12_pd(%rip), %rdi
191// CHECK-LPOPT64-NEXT: movq (%rdi), %rax
192// CHECK-LPOPT64-NEXT: call *8(%rax)
Mike Stump63bb7c22009-08-26 23:38:08 +0000193// CHECK-LPOPT64-NEXT: movq _test12_pa(%rip), %rdi
194// CHECK-LPOPT64-NEXT: call __ZN8test12_A3fooEv
Mike Stump49520942009-08-11 04:03:59 +0000195
Mike Stump94d0bce2009-08-13 00:34:14 +0000196struct test6_B2 { virtual void funcB2(); char b[1000]; };
197struct test6_B1 : virtual test6_B2 { virtual void funcB1(); };
198
199struct test6_D : test6_B2, virtual test6_B1 {
200};
201
Mike Stump16334272009-08-21 15:22:41 +0000202// CHECK-LP32: .zerofill __DATA, __common, _d6, 2012, 4
Mike Stump94d0bce2009-08-13 00:34:14 +0000203// CHECK-LP64: .zerofill __DATA, __common, _d6, 2024, 4
204
Mike Stump78846782009-08-13 23:33:29 +0000205struct test7_B2 { virtual void funcB2(); };
206struct test7_B1 : virtual test7_B2 { virtual void funcB1(); };
207
208struct test7_D : test7_B2, virtual test7_B1 {
209};
210
Mike Stump16334272009-08-21 15:22:41 +0000211// CHECK-LP32: .zerofill __DATA, __common, _d7, 8, 3
Mike Stump78846782009-08-13 23:33:29 +0000212// CHECK-LP64: .zerofill __DATA, __common, _d7, 16, 3
Mike Stump94d0bce2009-08-13 00:34:14 +0000213
214
Mike Stump49520942009-08-11 04:03:59 +0000215struct test3_B3 { virtual void funcB3(); };
216struct test3_B2 : virtual test3_B3 { virtual void funcB2(); };
217struct test3_B1 : virtual test3_B2 { virtual void funcB1(); };
218
Mike Stumpf0070db2009-08-26 20:46:33 +0000219struct test3_D : virtual test3_B1 {
Mike Stump49520942009-08-11 04:03:59 +0000220 virtual void funcD() { }
221};
222
223// CHECK-LP32:__ZTV7test3_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000224// CHECK-LP32-NEXT: .space 4
225// CHECK-LP32-NEXT: .space 4
226// CHECK-LP32-NEXT: .space 4
227// CHECK-LP32-NEXT: .space 4
228// CHECK-LP32-NEXT: .space 4
229// CHECK-LP32-NEXT: .space 4
230// CHECK-LP32-NEXT: .space 4
Mike Stump666a91e2009-08-21 18:05:02 +0000231// CHECK-LP32-NEXT: .long __ZTI7test3_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000232// CHECK-LP32-NEXT: .long __ZN8test3_B36funcB3Ev
233// CHECK-LP32-NEXT: .long __ZN8test3_B26funcB2Ev
234// CHECK-LP32-NEXT: .long __ZN8test3_B16funcB1Ev
235// CHECK-LP32-NEXT: .long __ZN7test3_D5funcDEv
Mike Stump49520942009-08-11 04:03:59 +0000236
237// CHECK-LP64:__ZTV7test3_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000238// CHECK-LP64-NEXT: .space 8
239// CHECK-LP64-NEXT: .space 8
240// CHECK-LP64-NEXT: .space 8
241// CHECK-LP64-NEXT: .space 8
242// CHECK-LP64-NEXT: .space 8
243// CHECK-LP64-NEXT: .space 8
244// CHECK-LP64-NEXT: .space 8
Mike Stump666a91e2009-08-21 18:05:02 +0000245// CHECK-LP64-NEXT: .quad __ZTI7test3_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000246// CHECK-LP64-NEXT: .quad __ZN8test3_B36funcB3Ev
247// CHECK-LP64-NEXT: .quad __ZN8test3_B26funcB2Ev
248// CHECK-LP64-NEXT: .quad __ZN8test3_B16funcB1Ev
249// CHECK-LP64-NEXT: .quad __ZN7test3_D5funcDEv
Mike Stump49520942009-08-11 04:03:59 +0000250
Mike Stump34fae9c2009-08-12 18:50:26 +0000251struct test4_D : virtual B, virtual C {
252};
253
254// CHECK-LP32:__ZTV7test4_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000255// CHECK-LP32-NEXT: .space 4
256// CHECK-LP32-NEXT: .long 4
257// CHECK-LP32-NEXT: .space 4
258// CHECK-LP32-NEXT: .space 4
259// CHECK-LP32-NEXT: .space 4
260// CHECK-LP32-NEXT: .long __ZTI7test4_D
261// CHECK-LP32-NEXT: .long __ZN1C4bee1Ev
262// CHECK-LP32-NEXT: .long __ZN1C4bee2Ev
263// CHECK-LP32-NEXT: .space 4
264// CHECK-LP32-NEXT: .space 4
265// CHECK-LP32-NEXT: .long 4294967292
266// CHECK-LP32-NEXT: .long __ZTI7test4_D
267// CHECK-LP32-NEXT: .long __ZN1B4bar1Ev
268// CHECK-LP32-NEXT: .long __ZN1B4bar2Ev
Mike Stump34fae9c2009-08-12 18:50:26 +0000269
270// CHECK-LP64:__ZTV7test4_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000271// CHECK-LP64-NEXT: .space 8
272// CHECK-LP64-NEXT: .quad 8
273// CHECK-LP64-NEXT: .space 8
274// CHECK-LP64-NEXT: .space 8
275// CHECK-LP64-NEXT: .space 8
276// CHECK-LP64-NEXT: .quad __ZTI7test4_D
277// CHECK-LP64-NEXT: .quad __ZN1C4bee1Ev
278// CHECK-LP64-NEXT: .quad __ZN1C4bee2Ev
279// CHECK-LP64-NEXT: .space 8
280// CHECK-LP64-NEXT: .space 8
281// CHECK-LP64-NEXT: .quad 18446744073709551608
282// CHECK-LP64-NEXT: .quad __ZTI7test4_D
283// CHECK-LP64-NEXT: .quad __ZN1B4bar1Ev
284// CHECK-LP64-NEXT: .quad __ZN1B4bar2Ev
Mike Stump34fae9c2009-08-12 18:50:26 +0000285
Mike Stump49520942009-08-11 04:03:59 +0000286
Mike Stumpd76264e2009-08-12 21:50:08 +0000287struct test5_B3 { virtual void funcB3(); };
288struct test5_B2 : virtual test5_B3 { virtual void funcB2(); };
289struct test5_B1 : virtual test5_B2 { virtual void funcB1(); };
290
291struct test5_B23 { virtual void funcB23(); };
292struct test5_B22 : virtual test5_B23 { virtual void funcB22(); };
293struct test5_B21 : virtual test5_B22 { virtual void funcB21(); };
294
295
296struct B232 { virtual void funcB232(); };
297struct B231 { virtual void funcB231(); };
298
299struct test5_B33 { virtual void funcB33(); };
300struct test5_B32 : virtual test5_B33, virtual B232 { virtual void funcB32(); };
301struct test5_B31 : virtual test5_B32, virtual B231 { virtual void funcB31(); };
302
303struct test5_D : virtual test5_B1, virtual test5_B21, virtual test5_B31 {
304 virtual void funcD() { }
305};
306
307// CHECK-LP32:__ZTV7test5_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000308// CHECK-LP32-NEXT: .long 16
309// CHECK-LP32-NEXT: .long 12
Mike Stumpfe3010d2009-08-16 19:04:13 +0000310// CHECK-LP32-NEXT: .long 8
311// CHECK-LP32-NEXT: .long 8
312// CHECK-LP32-NEXT: .long 8
313// CHECK-LP32-NEXT: .long 4
314// CHECK-LP32-NEXT: .long 4
315// CHECK-LP32-NEXT: .long 4
316// CHECK-LP32-NEXT: .space 4
Mike Stump4ec04c42009-08-16 02:40:14 +0000317// CHECK-LP32-NEXT: .space 4
318// CHECK-LP32-NEXT: .space 4
319// CHECK-LP32-NEXT: .space 4
320// CHECK-LP32-NEXT: .space 4
321// CHECK-LP32-NEXT: .space 4
322// CHECK-LP32-NEXT: .space 4
Mike Stumpb9837442009-08-20 07:22:17 +0000323// CHECK-LP32-NEXT: .long __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000324// CHECK-LP32-NEXT: .long __ZN8test5_B36funcB3Ev
325// CHECK-LP32-NEXT: .long __ZN8test5_B26funcB2Ev
326// CHECK-LP32-NEXT: .long __ZN8test5_B16funcB1Ev
327// CHECK-LP32-NEXT: .long __ZN7test5_D5funcDEv
Mike Stump4ec04c42009-08-16 02:40:14 +0000328// CHECK-LP32-NEXT: .space 4
329// CHECK-LP32-NEXT: .space 4
330// CHECK-LP32-NEXT: .space 4
331// CHECK-LP32-NEXT: .space 4
Mike Stump15a24e02009-08-28 23:22:54 +0000332// CHECK-LP32-NEXT: .space 4
Mike Stumpbf3fe202009-08-27 01:09:45 +0000333// CHECK-LP32-NEXT: .long 4294967292
Mike Stumpfe3010d2009-08-16 19:04:13 +0000334// CHECK-LP32-NEXT: .long __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000335// CHECK-LP32-NEXT: .long __ZN9test5_B237funcB23Ev
336// CHECK-LP32-NEXT: .long __ZN9test5_B227funcB22Ev
337// CHECK-LP32-NEXT: .long __ZN9test5_B217funcB21Ev
Mike Stump74be00b2009-09-01 22:01:25 +0000338// CHECK-LP32-NEXT: .space 4
Mike Stump6a9612f2009-10-31 20:06:59 +0000339// CHECK-LP32-NEXT: .long 8
340// CHECK-LP32-NEXT: .space 4
341// CHECK-LP32-NEXT: .space 4
342// CHECK-LP32-NEXT: .long 4
Mike Stump4ec04c42009-08-16 02:40:14 +0000343// CHECK-LP32-NEXT: .space 4
344// CHECK-LP32-NEXT: .space 4
Mike Stump9c88d982009-08-19 13:36:31 +0000345// CHECK-LP32-NEXT: .long 4294967288
Mike Stumpfe3010d2009-08-16 19:04:13 +0000346// CHECK-LP32-NEXT: .long __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000347// CHECK-LP32-NEXT: .long __ZN9test5_B337funcB33Ev
348// CHECK-LP32-NEXT: .long __ZN9test5_B327funcB32Ev
349// CHECK-LP32-NEXT: .long __ZN9test5_B317funcB31Ev
350// CHECK-LP32-NEXT: .space 4
351// CHECK-LP32-NEXT: .long 4294967284
352// CHECK-LP32-NEXT: .long __ZTI7test5_D
353// CHECK-LP32-NEXT: .long __ZN4B2328funcB232Ev
354// CHECK-LP32-NEXT: .space 4
Mike Stumpb9837442009-08-20 07:22:17 +0000355// CHECK-LP32-NEXT: .long 4294967280
Mike Stump4ec04c42009-08-16 02:40:14 +0000356// CHECK-LP32-NEXT: .long __ZTI7test5_D
357// CHECK-LP32-NEXT: .long __ZN4B2318funcB231Ev
Mike Stumpd76264e2009-08-12 21:50:08 +0000358
359// CHECK-LP64:__ZTV7test5_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000360// CHECK-LP64-NEXT: .quad 32
361// CHECK-LP64-NEXT: .quad 24
Mike Stumpfe3010d2009-08-16 19:04:13 +0000362// CHECK-LP64-NEXT: .quad 16
363// CHECK-LP64-NEXT: .quad 16
364// CHECK-LP64-NEXT: .quad 16
365// CHECK-LP64-NEXT: .quad 8
366// CHECK-LP64-NEXT: .quad 8
367// CHECK-LP64-NEXT: .quad 8
368// CHECK-LP64-NEXT: .space 8
Mike Stump4ec04c42009-08-16 02:40:14 +0000369// CHECK-LP64-NEXT: .space 8
370// CHECK-LP64-NEXT: .space 8
371// CHECK-LP64-NEXT: .space 8
372// CHECK-LP64-NEXT: .space 8
373// CHECK-LP64-NEXT: .space 8
374// CHECK-LP64-NEXT: .space 8
Mike Stumpb9837442009-08-20 07:22:17 +0000375// CHECK-LP64-NEXT: .quad __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000376// CHECK-LP64-NEXT: .quad __ZN8test5_B36funcB3Ev
377// CHECK-LP64-NEXT: .quad __ZN8test5_B26funcB2Ev
378// CHECK-LP64-NEXT: .quad __ZN8test5_B16funcB1Ev
379// CHECK-LP64-NEXT: .quad __ZN7test5_D5funcDEv
Mike Stump4ec04c42009-08-16 02:40:14 +0000380// CHECK-LP64-NEXT: .space 8
381// CHECK-LP64-NEXT: .space 8
382// CHECK-LP64-NEXT: .space 8
383// CHECK-LP64-NEXT: .space 8
Mike Stump15a24e02009-08-28 23:22:54 +0000384// CHECK-LP64-NEXT: .space 8
Mike Stumpbf3fe202009-08-27 01:09:45 +0000385// CHECK-LP64-NEXT: .quad 18446744073709551608
Mike Stumpfe3010d2009-08-16 19:04:13 +0000386// CHECK-LP64-NEXT: .quad __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000387// CHECK-LP64-NEXT: .quad __ZN9test5_B237funcB23Ev
388// CHECK-LP64-NEXT: .quad __ZN9test5_B227funcB22Ev
389// CHECK-LP64-NEXT: .quad __ZN9test5_B217funcB21Ev
Mike Stump74be00b2009-09-01 22:01:25 +0000390// CHECK-LP64-NEXT: .space 8
Mike Stump6a9612f2009-10-31 20:06:59 +0000391// CHECK-LP64-NEXT: .quad 16
392// CHECK-LP64-NEXT: .space 8
393// CHECK-LP64-NEXT: .space 8
394// CHECK-LP64-NEXT: .quad 8
Mike Stump4ec04c42009-08-16 02:40:14 +0000395// CHECK-LP64-NEXT: .space 8
396// CHECK-LP64-NEXT: .space 8
Mike Stump74be00b2009-09-01 22:01:25 +0000397// CHECK-LP64-NEXT: .quad 18446744073709551600
Mike Stumpfe3010d2009-08-16 19:04:13 +0000398// CHECK-LP64-NEXT: .quad __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000399// CHECK-LP64-NEXT: .quad __ZN9test5_B337funcB33Ev
400// CHECK-LP64-NEXT: .quad __ZN9test5_B327funcB32Ev
401// CHECK-LP64-NEXT: .quad __ZN9test5_B317funcB31Ev
402// CHECK-LP64-NEXT: .space 8
403// CHECK-LP64-NEXT: .quad 18446744073709551592
404// CHECK-LP64-NEXT: .quad __ZTI7test5_D
405// CHECK-LP64-NEXT: .quad __ZN4B2328funcB232Ev
406// CHECK-LP64-NEXT: .space 8
Mike Stumpb9837442009-08-20 07:22:17 +0000407// CHECK-LP64-NEXT: .quad 18446744073709551584
Mike Stump4ec04c42009-08-16 02:40:14 +0000408// CHECK-LP64-NEXT: .quad __ZTI7test5_D
409// CHECK-LP64-NEXT: .quad __ZN4B2318funcB231Ev
Mike Stumpd76264e2009-08-12 21:50:08 +0000410
Mike Stump276b9f12009-08-16 01:46:26 +0000411struct test8_B1 {
412 virtual void ftest8_B1() { }
413};
414struct test8_B2aa {
415 virtual void ftest8_B2aa() { }
416 int i;
417};
418struct test8_B2ab {
419 virtual void ftest8_B2ab() { }
420 int i;
421};
422struct test8_B2a : virtual test8_B2aa, virtual test8_B2ab {
423 virtual void ftest8_B2a() { }
424};
425struct test8_B2b {
426 virtual void ftest8_B2b() { }
427};
428struct test8_B2 : test8_B2a, test8_B2b {
429 virtual void ftest8_B2() { }
430};
431struct test8_B3 {
432 virtual void ftest8_B3() { }
433};
434class test8_D : test8_B1, test8_B2, test8_B3 {
Mike Stump09765ec2009-08-19 02:53:08 +0000435};
Mike Stump276b9f12009-08-16 01:46:26 +0000436
437// CHECK-LP32:__ZTV7test8_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000438// CHECK-LP32-NEXT: .long 24
439// CHECK-LP32-NEXT: .long 16
440// CHECK-LP32-NEXT: .space 4
Mike Stumpb46c92d2009-08-19 02:06:38 +0000441// CHECK-LP32-NEXT: .long __ZTI7test8_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000442// CHECK-LP32-NEXT: .long __ZN8test8_B19ftest8_B1Ev
443// CHECK-LP32-NEXT: .long 20
444// CHECK-LP32-NEXT: .long 12
Mike Stump7fa0d932009-08-20 02:11:48 +0000445// CHECK-LP32-NEXT: .long 4294967292
Mike Stump4ec04c42009-08-16 02:40:14 +0000446// CHECK-LP32-NEXT: .long __ZTI7test8_D
447// CHECK-LP32-NEXT: .long __ZN9test8_B2a10ftest8_B2aEv
448// CHECK-LP32-NEXT: .long __ZN8test8_B29ftest8_B2Ev
Mike Stumpb46c92d2009-08-19 02:06:38 +0000449// CHECK-LP32-NEXT: .long 4294967288
Mike Stump4ec04c42009-08-16 02:40:14 +0000450// CHECK-LP32-NEXT: .long __ZTI7test8_D
451// CHECK-LP32-NEXT: .long __ZN9test8_B2b10ftest8_B2bEv
Mike Stumpb46c92d2009-08-19 02:06:38 +0000452// CHECK-LP32-NEXT: .long 4294967284
Mike Stump4ec04c42009-08-16 02:40:14 +0000453// CHECK-LP32-NEXT: .long __ZTI7test8_D
454// CHECK-LP32-NEXT: .long __ZN8test8_B39ftest8_B3Ev
455// CHECK-LP32-NEXT: .space 4
456// CHECK-LP32-NEXT: .long 4294967280
457// CHECK-LP32-NEXT: .long __ZTI7test8_D
458// CHECK-LP32-NEXT: .long __ZN10test8_B2aa11ftest8_B2aaEv
459// CHECK-LP32-NEXT: .space 4
460// CHECK-LP32-NEXT: .long 4294967272
461// CHECK-LP32-NEXT: .long __ZTI7test8_D
462// CHECK-LP32-NEXT: .long __ZN10test8_B2ab11ftest8_B2abEv
Mike Stump276b9f12009-08-16 01:46:26 +0000463
464// CHECK-LP64:__ZTV7test8_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000465// CHECK-LP64-NEXT: .quad 48
466// CHECK-LP64-NEXT: .quad 32
467// CHECK-LP64-NEXT: .space 8
Mike Stumpb46c92d2009-08-19 02:06:38 +0000468// CHECK-LP64-NEXT: .quad __ZTI7test8_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000469// CHECK-LP64-NEXT: .quad __ZN8test8_B19ftest8_B1Ev
470// CHECK-LP64-NEXT: .quad 40
471// CHECK-LP64-NEXT: .quad 24
Mike Stump7fa0d932009-08-20 02:11:48 +0000472// CHECK-LP64-NEXT: .quad 18446744073709551608
Mike Stump4ec04c42009-08-16 02:40:14 +0000473// CHECK-LP64-NEXT: .quad __ZTI7test8_D
474// CHECK-LP64-NEXT: .quad __ZN9test8_B2a10ftest8_B2aEv
475// CHECK-LP64-NEXT: .quad __ZN8test8_B29ftest8_B2Ev
Mike Stumpb46c92d2009-08-19 02:06:38 +0000476// CHECK-LP64-NEXT: .quad 18446744073709551600
Mike Stump4ec04c42009-08-16 02:40:14 +0000477// CHECK-LP64-NEXT: .quad __ZTI7test8_D
478// CHECK-LP64-NEXT: .quad __ZN9test8_B2b10ftest8_B2bEv
Mike Stumpb46c92d2009-08-19 02:06:38 +0000479// CHECK-LP64-NEXT: .quad 18446744073709551592
Mike Stump4ec04c42009-08-16 02:40:14 +0000480// CHECK-LP64-NEXT: .quad __ZTI7test8_D
481// CHECK-LP64-NEXT: .quad __ZN8test8_B39ftest8_B3Ev
482// CHECK-LP64-NEXT: .space 8
483// CHECK-LP64-NEXT: .quad 18446744073709551584
484// CHECK-LP64-NEXT: .quad __ZTI7test8_D
485// CHECK-LP64-NEXT: .quad __ZN10test8_B2aa11ftest8_B2aaEv
486// CHECK-LP64-NEXT: .space 8
487// CHECK-LP64-NEXT: .quad 18446744073709551568
488// CHECK-LP64-NEXT: .quad __ZTI7test8_D
489// CHECK-LP64-NEXT: .quad __ZN10test8_B2ab11ftest8_B2abEv
Mike Stumpd76264e2009-08-12 21:50:08 +0000490
Mike Stump49520942009-08-11 04:03:59 +0000491
Mike Stump09765ec2009-08-19 02:53:08 +0000492struct test9_B3 { virtual void funcB3(); int i; };
493struct test9_B2 : virtual test9_B3 { virtual void funcB2(); int i; };
494struct test9_B1 : virtual test9_B2 { virtual void funcB1(); int i; };
495
496struct test9_B23 { virtual void funcB23(); int i; };
497struct test9_B22 : virtual test9_B23 { virtual void funcB22(); int i; };
498struct test9_B21 : virtual test9_B22 { virtual void funcB21(); int i; };
499
500
501struct test9_B232 { virtual void funcB232(); int i; };
502struct test9_B231 { virtual void funcB231(); int i; };
503
504struct test9_B33 { virtual void funcB33(); int i; };
505struct test9_B32 : virtual test9_B33, virtual test9_B232 { virtual void funcB32(); int i; };
506struct test9_B31 : virtual test9_B32, virtual test9_B231 { virtual void funcB31(); int i; };
507
508struct test9_D : virtual test9_B1, virtual test9_B21, virtual test9_B31 {
509 virtual void funcD() { }
510};
511
512// CHECK-LP64: __ZTV7test9_D:
513// CHECK-LP64-NEXT: .quad 168
514// CHECK-LP64-NEXT: .quad 152
515// CHECK-LP64-NEXT: .quad 136
516// CHECK-LP64-NEXT: .quad 120
517// CHECK-LP64-NEXT: .quad 104
518// CHECK-LP64-NEXT: .quad 88
519// CHECK-LP64-NEXT: .quad 72
520// CHECK-LP64-NEXT: .quad 56
521// CHECK-LP64-NEXT: .quad 40
522// CHECK-LP64-NEXT: .quad 24
523// CHECK-LP64-NEXT: .quad 8
524// CHECK-LP64-NEXT: .space 8
525// CHECK-LP64-NEXT: .quad __ZTI7test9_D
526// CHECK-LP64-NEXT: .quad __ZN7test9_D5funcDEv
527// CHECK-LP64-NEXT: .space 8
528// CHECK-LP64-NEXT: .quad 32
529// CHECK-LP64-NEXT: .quad 16
530// CHECK-LP64-NEXT: .quad 18446744073709551608
531// CHECK-LP64-NEXT: .quad __ZTI7test9_D
532// CHECK-LP64-NEXT: .quad __ZN8test9_B16funcB1Ev
533// CHECK-LP64-NEXT: .space 8
534// CHECK-LP64-NEXT: .quad 16
535// CHECK-LP64-NEXT: .quad 18446744073709551592
536// CHECK-LP64-NEXT: .quad __ZTI7test9_D
537// CHECK-LP64-NEXT: .quad __ZN8test9_B26funcB2Ev
538// CHECK-LP64-NEXT: .space 8
539// CHECK-LP64-NEXT: .quad 18446744073709551576
540// CHECK-LP64-NEXT: .quad __ZTI7test9_D
541// CHECK-LP64-NEXT: .quad __ZN8test9_B36funcB3Ev
542// CHECK-LP64-NEXT: .space 8
543// CHECK-LP64-NEXT: .quad 32
544// CHECK-LP64-NEXT: .quad 16
545// CHECK-LP64-NEXT: .quad 18446744073709551560
546// CHECK-LP64-NEXT: .quad __ZTI7test9_D
547// CHECK-LP64-NEXT: .quad __ZN9test9_B217funcB21Ev
548// CHECK-LP64-NEXT: .space 8
549// CHECK-LP64-NEXT: .quad 16
550// CHECK-LP64-NEXT: .quad 18446744073709551544
551// CHECK-LP64-NEXT: .quad __ZTI7test9_D
552// CHECK-LP64-NEXT: .quad __ZN9test9_B227funcB22Ev
553// CHECK-LP64-NEXT: .space 8
554// CHECK-LP64-NEXT: .quad 18446744073709551528
555// CHECK-LP64-NEXT: .quad __ZTI7test9_D
556// CHECK-LP64-NEXT: .quad __ZN9test9_B237funcB23Ev
557// CHECK-LP64-NEXT: .space 8
558// CHECK-LP64-NEXT: .quad 64
559// CHECK-LP64-NEXT: .quad 48
560// CHECK-LP64-NEXT: .quad 32
561// CHECK-LP64-NEXT: .quad 16
562// CHECK-LP64-NEXT: .quad 18446744073709551512
563// CHECK-LP64-NEXT: .quad __ZTI7test9_D
564// CHECK-LP64-NEXT: .quad __ZN9test9_B317funcB31Ev
565// CHECK-LP64-NEXT: .space 8
566// CHECK-LP64-NEXT: .quad 32
567// CHECK-LP64-NEXT: .quad 16
568// CHECK-LP64-NEXT: .quad 18446744073709551496
569// CHECK-LP64-NEXT: .quad __ZTI7test9_D
570// CHECK-LP64-NEXT: .quad __ZN9test9_B327funcB32Ev
571// CHECK-LP64-NEXT: .space 8
572// CHECK-LP64-NEXT: .quad 18446744073709551480
573// CHECK-LP64-NEXT: .quad __ZTI7test9_D
574// CHECK-LP64-NEXT: .quad __ZN9test9_B337funcB33Ev
575// CHECK-LP64-NEXT: .space 8
576// CHECK-LP64-NEXT: .quad 18446744073709551464
577// CHECK-LP64-NEXT: .quad __ZTI7test9_D
578// CHECK-LP64-NEXT: .quad __ZN10test9_B2328funcB232Ev
579// CHECK-LP64-NEXT: .space 8
580// CHECK-LP64-NEXT: .quad 18446744073709551448
581// CHECK-LP64-NEXT: .quad __ZTI7test9_D
582// CHECK-LP64-NEXT: .quad __ZN10test9_B2318funcB231Ev
583
584// CHECK-LP32: __ZTV7test9_D:
585// CHECK-LP32-NEXT: .long 84
586// CHECK-LP32-NEXT: .long 76
587// CHECK-LP32-NEXT: .long 68
588// CHECK-LP32-NEXT: .long 60
589// CHECK-LP32-NEXT: .long 52
590// CHECK-LP32-NEXT: .long 44
591// CHECK-LP32-NEXT: .long 36
592// CHECK-LP32-NEXT: .long 28
593// CHECK-LP32-NEXT: .long 20
594// CHECK-LP32-NEXT: .long 12
595// CHECK-LP32-NEXT: .long 4
596// CHECK-LP32-NEXT: .space 4
597// CHECK-LP32-NEXT: .long __ZTI7test9_D
598// CHECK-LP32-NEXT: .long __ZN7test9_D5funcDEv
599// CHECK-LP32-NEXT: .space 4
600// CHECK-LP32-NEXT: .long 16
601// CHECK-LP32-NEXT: .long 8
602// CHECK-LP32-NEXT: .long 4294967292
603// CHECK-LP32-NEXT: .long __ZTI7test9_D
604// CHECK-LP32-NEXT: .long __ZN8test9_B16funcB1Ev
605// CHECK-LP32-NEXT: .space 4
606// CHECK-LP32-NEXT: .long 8
607// CHECK-LP32-NEXT: .long 4294967284
608// CHECK-LP32-NEXT: .long __ZTI7test9_D
609// CHECK-LP32-NEXT: .long __ZN8test9_B26funcB2Ev
610// CHECK-LP32-NEXT: .space 4
611// CHECK-LP32-NEXT: .long 4294967276
612// CHECK-LP32-NEXT: .long __ZTI7test9_D
613// CHECK-LP32-NEXT: .long __ZN8test9_B36funcB3Ev
614// CHECK-LP32-NEXT: .space 4
615// CHECK-LP32-NEXT: .long 16
616// CHECK-LP32-NEXT: .long 8
617// CHECK-LP32-NEXT: .long 4294967268
618// CHECK-LP32-NEXT: .long __ZTI7test9_D
619// CHECK-LP32-NEXT: .long __ZN9test9_B217funcB21Ev
620// CHECK-LP32-NEXT: .space 4
621// CHECK-LP32-NEXT: .long 8
622// CHECK-LP32-NEXT: .long 4294967260
623// CHECK-LP32-NEXT: .long __ZTI7test9_D
624// CHECK-LP32-NEXT: .long __ZN9test9_B227funcB22Ev
625// CHECK-LP32-NEXT: .space 4
626// CHECK-LP32-NEXT: .long 4294967252
627// CHECK-LP32-NEXT: .long __ZTI7test9_D
628// CHECK-LP32-NEXT: .long __ZN9test9_B237funcB23Ev
629// CHECK-LP32-NEXT: .space 4
630// CHECK-LP32-NEXT: .long 32
631// CHECK-LP32-NEXT: .long 24
632// CHECK-LP32-NEXT: .long 16
633// CHECK-LP32-NEXT: .long 8
634// CHECK-LP32-NEXT: .long 4294967244
635// CHECK-LP32-NEXT: .long __ZTI7test9_D
636// CHECK-LP32-NEXT: .long __ZN9test9_B317funcB31Ev
637// CHECK-LP32-NEXT: .space 4
638// CHECK-LP32-NEXT: .long 16
639// CHECK-LP32-NEXT: .long 8
640// CHECK-LP32-NEXT: .long 4294967236
641// CHECK-LP32-NEXT: .long __ZTI7test9_D
642// CHECK-LP32-NEXT: .long __ZN9test9_B327funcB32Ev
643// CHECK-LP32-NEXT: .space 4
644// CHECK-LP32-NEXT: .long 4294967228
645// CHECK-LP32-NEXT: .long __ZTI7test9_D
646// CHECK-LP32-NEXT: .long __ZN9test9_B337funcB33Ev
647// CHECK-LP32-NEXT: .space 4
648// CHECK-LP32-NEXT: .long 4294967220
649// CHECK-LP32-NEXT: .long __ZTI7test9_D
650// CHECK-LP32-NEXT: .long __ZN10test9_B2328funcB232Ev
651// CHECK-LP32-NEXT: .space 4
652// CHECK-LP32-NEXT: .long 4294967212
653// CHECK-LP32-NEXT: .long __ZTI7test9_D
654// CHECK-LP32-NEXT: .long __ZN10test9_B2318funcB231Ev
655
Mike Stumpb9837442009-08-20 07:22:17 +0000656struct test10_O { int i; };
657
658struct test10_B1 : virtual test10_O {
659 virtual void ftest10_B1() { }
660};
661
662struct test10_B2aa : virtual test10_O {
663 int i;
664};
665struct test10_B2ab : virtual test10_O {
666 int i;
667};
668struct test10_B2a : virtual test10_B2aa, virtual test10_B2ab,virtual test10_O {
669 virtual void ftest10_B2a() { }
670};
671struct test10_B2b : virtual test10_O {
672 virtual void ftest10_B2b() { }
673};
674struct test10_B2 : test10_B2a {
675 virtual void ftest10_B2() { }
676};
677class test10_D : test10_B1, test10_B2 {
678
679 void ftest10_B2aa() { }
680};
681
682// CHECK-LP64:__ZTV8test10_D:
683// CHECK-LP64-NEXT: .quad 40
684// CHECK-LP64-NEXT: .quad 24
685// CHECK-LP64-NEXT: .quad 16
686// CHECK-LP64-NEXT: .space 8
687// CHECK-LP64-NEXT: .quad __ZTI8test10_D
688// CHECK-LP64-NEXT: .quad __ZN9test10_B110ftest10_B1Ev
689// CHECK-LP64-NEXT: .quad 32
690// CHECK-LP64-NEXT: .quad 8
691// CHECK-LP64-NEXT: .quad 16
692// CHECK-LP64-NEXT: .quad 18446744073709551608
693// CHECK-LP64-NEXT: .quad __ZTI8test10_D
694// CHECK-LP64-NEXT: .quad __ZN10test10_B2a11ftest10_B2aEv
695// CHECK-LP64-NEXT: .quad __ZN9test10_B210ftest10_B2Ev
696// CHECK-LP64-NEXT: .quad 18446744073709551608
697// CHECK-LP64-NEXT: .quad 18446744073709551592
698// CHECK-LP64-NEXT: .quad __ZTI8test10_D
699// CHECK-LP64-NEXT: .quad 18446744073709551592
700// CHECK-LP64-NEXT: .quad 18446744073709551576
701// CHECK-LP64-NEXT: .quad __ZTI8test10_D
702
703// CHECK-LP32: __ZTV8test10_D:
704// CHECK-LP32-NEXT: .long 20
705// CHECK-LP32-NEXT: .long 12
706// CHECK-LP32-NEXT: .long 8
707// CHECK-LP32-NEXT: .space 4
708// CHECK-LP32-NEXT: .long __ZTI8test10_D
709// CHECK-LP32-NEXT: .long __ZN9test10_B110ftest10_B1Ev
710// CHECK-LP32-NEXT: .long 16
711// CHECK-LP32-NEXT: .long 4
712// CHECK-LP32-NEXT: .long 8
713// CHECK-LP32-NEXT: .long 4294967292
714// CHECK-LP32-NEXT: .long __ZTI8test10_D
715// CHECK-LP32-NEXT: .long __ZN10test10_B2a11ftest10_B2aEv
716// CHECK-LP32-NEXT: .long __ZN9test10_B210ftest10_B2Ev
717// CHECK-LP32-NEXT: .long 4294967292
718// CHECK-LP32-NEXT: .long 4294967284
719// CHECK-LP32-NEXT: .long __ZTI8test10_D
720// CHECK-LP32-NEXT: .long 4294967284
721// CHECK-LP32-NEXT: .long 4294967276
722// CHECK-LP32-NEXT: .long __ZTI8test10_D
723
Mike Stumpb9871a22009-08-21 01:45:00 +0000724struct test11_B {
725 virtual void B1() { }
726 virtual void D() { }
727 virtual void B2() { }
728};
729
730struct test11_D : test11_B {
731 virtual void D1() { }
732 virtual void D() { }
733 virtual void D2() { }
734};
735
736// CHECK-LP32:__ZTV8test11_D:
737// CHECK-LP32-NEXT: .space 4
738// CHECK-LP32-NEXT: .long __ZTI8test11_D
739// CHECK-LP32-NEXT: .long __ZN8test11_B2B1Ev
740// CHECK-LP32-NEXT: .long __ZN8test11_D1DEv
741// CHECK-LP32-NEXT: .long __ZN8test11_B2B2Ev
742// CHECK-LP32-NEXT: .long __ZN8test11_D2D1Ev
743// CHECK-LP32-NEXT: .long __ZN8test11_D2D2Ev
744
745
746// CHECK-LP64:__ZTV8test11_D:
747// CHECK-LP64-NEXT: .space 8
748// CHECK-LP64-NEXT: .quad __ZTI8test11_D
749// CHECK-LP64-NEXT: .quad __ZN8test11_B2B1Ev
750// CHECK-LP64-NEXT: .quad __ZN8test11_D1DEv
751// CHECK-LP64-NEXT: .quad __ZN8test11_B2B2Ev
752// CHECK-LP64-NEXT: .quad __ZN8test11_D2D1Ev
753// CHECK-LP64-NEXT: .quad __ZN8test11_D2D2Ev
Mike Stumpb9837442009-08-20 07:22:17 +0000754
Mike Stumpdec025b2009-09-07 04:27:52 +0000755struct test13_B {
756 virtual void B1() { }
757 virtual void D() { }
758 virtual void Da();
759 virtual void Db() { }
760 virtual void Dc() { }
761 virtual void B2() { }
762 int i;
763};
764
765
766struct test13_NV1 {
767 virtual void fooNV1() { }
768 virtual void D() { }
769};
770
771
772struct test13_B2 : /* test13_NV1, */ virtual test13_B {
773 virtual void B2a() { }
774 virtual void B2() { }
775 virtual void D() { }
776 virtual void Da();
777 virtual void Dd() { }
778 virtual void B2b() { }
779 int i;
780};
781
782
783struct test13_D : test13_NV1, virtual test13_B2 {
784 virtual void D1() { }
785 virtual void D() { }
786 virtual void Db() { }
787 virtual void Dd() { }
788 virtual void D2() { }
789 virtual void fooNV1() { }
Mike Stumpd9878a12009-10-13 10:55:21 +0000790};
Mike Stumpdec025b2009-09-07 04:27:52 +0000791
792// CHECK-LP64:__ZTV8test13_D:
793// CHECK-LP64-NEXT: .quad 24
794// CHECK-LP64-NEXT: .quad 8
795// CHECK-LP64-NEXT: .space 8
796// CHECK-LP64-NEXT: .quad __ZTI8test13_D
797// CHECK-LP64-NEXT: .quad __ZN8test13_D6fooNV1Ev
798// CHECK-LP64-NEXT: .quad __ZN8test13_D1DEv
799// CHECK-LP64-NEXT: .quad __ZN8test13_D2D1Ev
800// CHECK-LP64-NEXT: .quad __ZN8test13_D2DbEv
801// CHECK-LP64-NEXT: .quad __ZN8test13_D2DdEv
802// CHECK-LP64-NEXT: .quad __ZN8test13_D2D2Ev
803// CHECK-LP64-NEXT: .space 8
804// CHECK-LP64-NEXT: .quad 18446744073709551608
805// CHECK-LP64-NEXT: .space 8
806// CHECK-LP64-NEXT: .quad 18446744073709551608
807// CHECK-LP64-NEXT: .space 8
808// CHECK-LP64-NEXT: .space 8
809// CHECK-LP64-NEXT: .quad 16
810// CHECK-LP64-NEXT: .quad 18446744073709551608
811// CHECK-LP64-NEXT: .quad __ZTI8test13_D
812// CHECK-LP64-NEXT: .quad __ZN9test13_B23B2aEv
813// CHECK-LP64-NEXT: .quad __ZN9test13_B22B2Ev
814// CHECK-LP64-NEXT: .quad __ZTv0_n48_N8test13_D1DEv
815// CHECK-LP64-NEXT: .quad __ZN9test13_B22DaEv
816// CHECK-LP64-NEXT: .quad __ZTv0_n64_N8test13_D2DdEv
817// CHECK-LP64-NEXT: .quad __ZN9test13_B23B2bEv
818// CHECK-LP64-NEXT: .quad 18446744073709551600
819// CHECK-LP64-NEXT: .space 8
820// CHECK-LP64-NEXT: .quad 18446744073709551592
821// CHECK-LP64-NEXT: .quad 18446744073709551600
822// CHECK-LP64-NEXT: .quad 18446744073709551592
823// CHECK-LP64-NEXT: .space 8
824// CHECK-LP64-NEXT: .quad 18446744073709551592
825// CHECK-LP64-NEXT: .quad __ZTI8test13_D
826// CHECK-LP64-NEXT: .quad __ZN8test13_B2B1Ev
827// CHECK-LP64-NEXT: .quad __ZTv0_n32_N8test13_D1DEv
828// CHECK-LP64-NEXT: .quad __ZTv0_n40_N9test13_B22DaEv
829// CHECK-LP64-NEXT: .quad __ZTv0_n48_N8test13_D2DbEv
830// CHECK-LP64-NEXT: .quad __ZN8test13_B2DcEv
831// CHECK-LP64-NEXT: .quad __ZTv0_n64_N9test13_B22B2Ev
832
833// CHECK-LP32:__ZTV8test13_D:
834// CHECK-LP32-NEXT: .long 12
835// CHECK-LP32-NEXT: .long 4
836// CHECK-LP32-NEXT: .space 4
837// CHECK-LP32-NEXT: .long __ZTI8test13_D
838// CHECK-LP32-NEXT: .long __ZN8test13_D6fooNV1Ev
839// CHECK-LP32-NEXT: .long __ZN8test13_D1DEv
840// CHECK-LP32-NEXT: .long __ZN8test13_D2D1Ev
841// CHECK-LP32-NEXT: .long __ZN8test13_D2DbEv
842// CHECK-LP32-NEXT: .long __ZN8test13_D2DdEv
843// CHECK-LP32-NEXT: .long __ZN8test13_D2D2Ev
844// CHECK-LP32-NEXT: .space 4
845// CHECK-LP32-NEXT: .long 4294967292
846// CHECK-LP32-NEXT: .space 4
847// CHECK-LP32-NEXT: .long 4294967292
848// CHECK-LP32-NEXT: .space 4
849// CHECK-LP32-NEXT: .space 4
850// CHECK-LP32-NEXT: .long 8
851// CHECK-LP32-NEXT: .long 4294967292
852// CHECK-LP32-NEXT: .long __ZTI8test13_D
853// CHECK-LP32-NEXT: .long __ZN9test13_B23B2aEv
854// CHECK-LP32-NEXT: .long __ZN9test13_B22B2Ev
855// CHECK-LP32-NEXT: .long __ZTv0_n24_N8test13_D1DEv
856// CHECK-LP32-NEXT: .long __ZN9test13_B22DaEv
857// CHECK-LP32-NEXT: .long __ZTv0_n32_N8test13_D2DdEv
858// CHECK-LP32-NEXT: .long __ZN9test13_B23B2bEv
859// CHECK-LP32-NEXT: .long 4294967288
860// CHECK-LP32-NEXT: .space 4
861// CHECK-LP32-NEXT: .long 4294967284
862// CHECK-LP32-NEXT: .long 4294967288
863// CHECK-LP32-NEXT: .long 4294967284
864// CHECK-LP32-NEXT: .space 4
865// CHECK-LP32-NEXT: .long 4294967284
866// CHECK-LP32-NEXT: .long __ZTI8test13_D
867// CHECK-LP32-NEXT: .long __ZN8test13_B2B1Ev
868// CHECK-LP32-NEXT: .long __ZTv0_n16_N8test13_D1DEv
869// CHECK-LP32-NEXT: .long __ZTv0_n20_N9test13_B22DaEv
870// CHECK-LP32-NEXT: .long __ZTv0_n24_N8test13_D2DbEv
871// CHECK-LP32-NEXT: .long __ZN8test13_B2DcEv
872// CHECK-LP32-NEXT: .long __ZTv0_n32_N9test13_B22B2Ev
873
Mike Stump09765ec2009-08-19 02:53:08 +0000874
Mike Stumpd9878a12009-10-13 10:55:21 +0000875class test14 {
876public:
877 virtual void initWithInt(int a);
878 static test14 *withInt(int a);
879};
880
881void test14::initWithInt(int a) { }
882
883test14 *test14::withInt(int a) {
884 test14 *me = new test14;
885 me->initWithInt(a);
886 return me;
887}
888
889
890struct test15_B {
891 virtual test15_B *foo1() { return 0; }
892 virtual test15_B *foo2() { return 0; }
893 virtual test15_B *foo3() { return 0; }
894 int i;
895};
896
897struct test15_NV1 {
898 virtual void fooNV1() { }
899 int i;
900};
901
902struct test15_B2 : test15_NV1, virtual test15_B {
903 virtual test15_B2 *foo1() { return 0; }
904 virtual test15_B2 *foo2() { return 0; }
905 int i;
906};
907
908struct test15_D : test15_NV1, virtual test15_B2 {
909 virtual test15_D *foo1() { return 0; }
910};
911
912// CHECK-LP64:__ZTV8test15_D:
913// CHECK-LP64-NEXT: .quad 32
914// CHECK-LP64-NEXT: .quad 16
915// CHECK-LP64-NEXT: .space 8
916// CHECK-LP64-NEXT: .quad __ZTI8test15_D
917// CHECK-LP64-NEXT: .quad __ZN10test15_NV16fooNV1Ev
918// CHECK-LP64-NEXT: .quad __ZN8test15_D4foo1Ev
919// CHECK-LP64-NEXT: .space 8
920// CHECK-LP64-NEXT: .quad 18446744073709551600
921// CHECK-LP64-NEXT: .space 8
922// CHECK-LP64-NEXT: .quad 16
923// CHECK-LP64-NEXT: .quad 18446744073709551600
924// CHECK-LP64-NEXT: .quad __ZTI8test15_D
925// CHECK-LP64-NEXT: .quad __ZN10test15_NV16fooNV1Ev
926// CHECK-LP64-NEXT: .quad __ZTcv0_n40_v0_n24_N8test15_D4foo1Ev
927// CHECK-LP64-NEXT: .quad __ZN9test15_B24foo2Ev
928// CHECK-LP64-NEXT: .space 8
929// CHECK-LP64-NEXT: .quad 18446744073709551600
930// CHECK-LP64-NEXT: .quad 18446744073709551584
931// CHECK-LP64-NEXT: .quad 18446744073709551584
932// CHECK-LP64-NEXT: .quad __ZTI8test15_D
933// CHECK-LP64-NEXT: .quad __ZTcv0_n24_v0_n32_N8test15_D4foo1Ev
934// CHECK-LP64-NEXT: .quad __ZTcv0_n32_v0_n24_N9test15_B24foo2Ev
935// CHECK-LP64-NEXT: .quad __ZN8test15_B4foo3Ev
936
937// CHECK-LP32:__ZTV8test15_D:
938// CHECK-LP32-NEXT: .long 20
939// CHECK-LP32-NEXT: .long 8
940// CHECK-LP32-NEXT: .space 4
941// CHECK-LP32-NEXT: .long __ZTI8test15_D
942// CHECK-LP32-NEXT: .long __ZN10test15_NV16fooNV1Ev
943// CHECK-LP32-NEXT: .long __ZN8test15_D4foo1Ev
944// CHECK-LP32-NEXT: .space 4
945// CHECK-LP32-NEXT: .long 4294967288
946// CHECK-LP32-NEXT: .space 4
947// CHECK-LP32-NEXT: .long 12
948// CHECK-LP32-NEXT: .long 4294967288
949// CHECK-LP32-NEXT: .long __ZTI8test15_D
950// CHECK-LP32-NEXT: .long __ZN10test15_NV16fooNV1Ev
951// CHECK-LP32-NEXT: .long __ZTcv0_n20_v0_n12_N8test15_D4foo1Ev
952// CHECK-LP32-NEXT: .long __ZN9test15_B24foo2Ev
953// CHECK-LP32-NEXT: .space 4
954// CHECK-LP32-NEXT: .long 4294967284
955// CHECK-LP32-NEXT: .long 4294967276
956// CHECK-LP32-NEXT: .long 4294967276
957// CHECK-LP32-NEXT: .long __ZTI8test15_D
958// CHECK-LP32-NEXT: .long __ZTcv0_n12_v0_n16_N8test15_D4foo1Ev
959// CHECK-LP32-NEXT: .long __ZTcv0_n16_v0_n12_N9test15_B24foo2Ev
960// CHECK-LP32-NEXT: .long __ZN8test15_B4foo3Ev
961
962
Mike Stump54150d92009-10-14 18:38:01 +0000963struct test16_NV1 {
964 virtual void fooNV1() { }
965virtual void foo_NV1() { }
966 int i;
967};
968
969struct test16_NV2 {
970 virtual test16_NV2* foo1() { return 0; }
971virtual void foo_NV2() { }
972virtual void foo_NV2b() { }
973 int i;
974};
975
976struct test16_B : public test16_NV1, test16_NV2 {
977 virtual test16_B *foo1() { return 0; }
978 virtual test16_B *foo2() { return 0; }
979 virtual test16_B *foo3() { return 0; }
980virtual void foo_B() { }
981 int i;
982};
983
984struct test16_B2 : test16_NV1, virtual test16_B {
985 virtual test16_B2 *foo1() { return 0; }
986 virtual test16_B2 *foo2() { return 0; }
987virtual void foo_B2() { }
988 int i;
989};
990
991struct test16_D : test16_NV1, virtual test16_B2 {
992 virtual test16_D *foo1() { return 0; }
993};
994
995// CHECK-LP64: __ZTV8test16_D:
996// CHECK-LP64-NEXT: .quad 32
997// CHECK-LP64-NEXT: .quad 16
998// CHECK-LP64-NEXT: .space 8
999// CHECK-LP64-NEXT: .quad __ZTI8test16_D
1000// CHECK-LP64-NEXT: .quad __ZN10test16_NV16fooNV1Ev
1001// CHECK-LP64-NEXT: .quad __ZN10test16_NV17foo_NV1Ev
1002// CHECK-LP64-NEXT: .quad __ZN8test16_D4foo1Ev
1003// CHECK-LP64-NEXT: .space 8
1004// CHECK-LP64-NEXT: .space 8
1005// CHECK-LP64-NEXT: .quad 18446744073709551600
1006// CHECK-LP64-NEXT: .space 8
1007// CHECK-LP64-NEXT: .space 8
1008// CHECK-LP64-NEXT: .quad 16
1009// CHECK-LP64-NEXT: .quad 18446744073709551600
1010// CHECK-LP64-NEXT: .quad __ZTI8test16_D
1011// CHECK-LP64-NEXT: .quad __ZN10test16_NV16fooNV1Ev
1012// CHECK-LP64-NEXT: .quad __ZN10test16_NV17foo_NV1Ev
1013// CHECK-LP64-NEXT: .quad __ZTcv0_n48_v0_n24_N8test16_D4foo1Ev
1014// CHECK-LP64-NEXT: .quad __ZN9test16_B24foo2Ev
1015// CHECK-LP64-NEXT: .quad __ZN9test16_B26foo_B2Ev
1016// CHECK-LP64-NEXT .quad 16
1017// CHECK-LP64-NEXT .quad 16
1018// CHECK-LP64-NEXT: .space 8
1019// CHECK-LP64-NEXT: .space 8
1020// CHECK-LP64: .quad 18446744073709551600
1021// CHECK-LP64: .quad 18446744073709551584
1022// CHECK-LP64-NEXT: .space 8
1023// CHECK-LP64-NEXT: .space 8
1024// CHECK-LP64-NEXT: .quad 18446744073709551584
1025// CHECK-LP64-NEXT: .quad __ZTI8test16_D
1026// CHECK-LP64-NEXT: .quad __ZN10test16_NV16fooNV1Ev
1027// CHECK-LP64-NEXT: .quad __ZN10test16_NV17foo_NV1Ev
1028// CHECK-LP64-NEXT: .quad __ZTcv0_n40_v0_n32_N8test16_D4foo1Ev
1029// CHECK-LP64-NEXT: .quad __ZTcv0_n48_v0_n24_N9test16_B24foo2Ev
1030// CHECK-LP64-NEXT: .quad __ZN8test16_B4foo3Ev
1031// CHECK-LP64-NEXT: .quad __ZN8test16_B5foo_BEv
1032// CHECK-LP64-NEXT: .quad 18446744073709551568
1033// CHECK-LP64-NEXT: .quad __ZTI8test16_D
1034// CHECK-LP64-NEXT .quad __ZTcvn16_n40_v16_n32_N8test16_D4foo1Ev
1035// CHECK-LP64: .quad __ZN10test16_NV27foo_NV2Ev
1036// CHECK-LP64-NEXT: .quad __ZN10test16_NV28foo_NV2bEv
1037
1038// CHECK-LP32: __ZTV8test16_D:
1039// CHECK-LP32-NEXT: .long 20
1040// CHECK-LP32-NEXT: .long 8
1041// CHECK-LP32-NEXT: .space 4
1042// CHECK-LP32-NEXT: .long __ZTI8test16_D
1043// CHECK-LP32-NEXT: .long __ZN10test16_NV16fooNV1Ev
1044// CHECK-LP32-NEXT: .long __ZN10test16_NV17foo_NV1Ev
1045// CHECK-LP32-NEXT: .long __ZN8test16_D4foo1Ev
1046// CHECK-LP32-NEXT: .space 4
1047// CHECK-LP32-NEXT: .space 4
1048// CHECK-LP32-NEXT: .long 4294967288
1049// CHECK-LP32-NEXT: .space 4
1050// CHECK-LP32-NEXT: .space 4
1051// CHECK-LP32-NEXT: .long 12
1052// CHECK-LP32-NEXT: .long 4294967288
1053// CHECK-LP32-NEXT: .long __ZTI8test16_D
1054// CHECK-LP32-NEXT: .long __ZN10test16_NV16fooNV1Ev
1055// CHECK-LP32-NEXT: .long __ZN10test16_NV17foo_NV1Ev
1056// CHECK-LP32-NEXT: .long __ZTcv0_n24_v0_n12_N8test16_D4foo1Ev
1057// CHECK-LP32-NEXT: .long __ZN9test16_B24foo2Ev
1058// CHECK-LP32-NEXT: .long __ZN9test16_B26foo_B2Ev
1059// CHECK-LP32-NEXT .long 8
1060// CHECK-LP32-NEXT .long 8
1061// CHECK-LP32-NEXT: .space 4
1062// CHECK-LP32-NEXT: .space 4
1063// CHECK-LP32: .long 4294967284
1064// CHECK-LP32-NEXT: .long 4294967276
1065// CHECK-LP32-NEXT: .space 4
1066// CHECK-LP32-NEXT: .space 4
1067// CHECK-LP32-NEXT: .long 4294967276
1068// CHECK-LP32-NEXT: .long __ZTI8test16_D
1069// CHECK-LP32-NEXT: .long __ZN10test16_NV16fooNV1Ev
1070// CHECK-LP32-NEXT: .long __ZN10test16_NV17foo_NV1Ev
1071// CHECK-LP32-NEXT: .long __ZTcv0_n20_v0_n16_N8test16_D4foo1Ev
1072// CHECK-LP32-NEXT: .long __ZTcv0_n24_v0_n12_N9test16_B24foo2Ev
1073// CHECK-LP32-NEXT: .long __ZN8test16_B4foo3Ev
1074// CHECK-LP32-NEXT: .long __ZN8test16_B5foo_BEv
1075// CHECK-LP32-NEXT: .long 4294967268
1076// CHECK-LP32-NEXT: .long __ZTI8test16_D
1077// CHECK-LP32-NEXT .long __ZTcvn8_n20_v8_n16_N8test16_D4foo1Ev
1078// CHECK-LP32: .long __ZN10test16_NV27foo_NV2Ev
1079// CHECK-LP32-NEXT: .long __ZN10test16_NV28foo_NV2bEv
1080
Mike Stumpd9878a12009-10-13 10:55:21 +00001081
Mike Stump7809e0d2009-10-28 00:35:46 +00001082class test17_B1 {
1083 virtual void foo() = 0;
1084 virtual void bar() { }
1085};
1086
1087class test17_B2 : public test17_B1 {
1088 void foo() { }
1089 virtual void bar() = 0;
1090};
1091
1092class test17_D : public test17_B2 {
1093 void bar() { }
Mike Stump62db2452009-11-03 19:28:52 +00001094};
Mike Stump7809e0d2009-10-28 00:35:46 +00001095
1096
1097// CHECK-LP64:__ZTV8test17_D:
1098// CHECK-LP64-NEXT: .space 8
1099// CHECK-LP64-NEXT: .quad __ZTI8test17_D
1100// CHECK-LP64-NEXT: .quad __ZN9test17_B23fooEv
1101// CHECK-LP64-NEXT: .quad __ZN8test17_D3barEv
1102
1103// CHECK-LP64:__ZTV9test17_B2:
1104// CHECK-LP64-NEXT: .space 8
1105// CHECK-LP64-NEXT: .quad __ZTI9test17_B2
1106// CHECK-LP64-NEXT: .quad __ZN9test17_B23fooEv
1107// CHECK-LP64-NEXT: .quad ___cxa_pure_virtual
1108
1109// CHECK-LP64:__ZTV9test17_B1:
1110// CHECK-LP64-NEXT: .space 8
1111// CHECK-LP64-NEXT: .quad __ZTI9test17_B1
1112// CHECK-LP64-NEXT: .quad ___cxa_pure_virtual
1113// CHECK-LP64-NEXT: .quad __ZN9test17_B13barEv
1114
1115
Mike Stump9c212892009-11-03 19:03:17 +00001116struct test18_NV1 {
1117 virtual void fooNV1() { }
1118virtual void foo_NV1() { }
1119 int i;
1120};
1121
1122struct test18_NV2 {
1123 virtual test18_NV2& foo1() { return *this; }
1124virtual void foo_NV2() { }
1125virtual void foo_NV2b() { }
1126 int i;
1127};
1128
1129struct test18_B : public test18_NV1, test18_NV2 {
1130 virtual test18_B& foo1() { return *this; }
1131 virtual test18_B *foo2() { return 0; }
1132 virtual test18_B *foo3() { return 0; }
1133virtual void foo_B() { }
1134 int i;
1135};
1136
1137struct test18_B2 : test18_NV1, virtual test18_B {
1138 virtual test18_B2& foo1() { return *this; }
1139 virtual test18_B2 *foo2() { return 0; }
1140virtual void foo_B2() { }
1141 int i;
1142};
1143
1144struct test18_D : test18_NV1, virtual test18_B2 {
1145 virtual test18_D& foo1() { return *this; }
Mike Stump62db2452009-11-03 19:28:52 +00001146};
1147
1148
1149struct test19_VB1 { };
1150struct test19_B1 : public virtual test19_VB1 {
1151 virtual void fB1() { }
1152 virtual void foB1B2() { }
1153 virtual void foB1B3() { }
1154 virtual void foB1B4() { }
1155};
1156
1157struct test19_VB2 { };
1158struct test19_B2: public test19_B1, public virtual test19_VB2 {
1159 virtual void foB1B2() { }
1160 virtual void foB1B3() { }
1161 virtual void foB1B4() { }
1162
1163 virtual void fB2() { }
1164 virtual void foB2B3() { }
1165 virtual void foB2B4() { }
1166};
1167
1168struct test19_VB3 { };
1169struct test19_B3: virtual public test19_B2, public virtual test19_VB3 {
1170 virtual void foB1B3() { }
1171 virtual void foB1B4() { }
1172
1173 virtual void foB2B3() { }
1174 virtual void foB2B4() { }
1175
1176 virtual void fB3() { }
1177 virtual void foB3B4() { }
1178};
1179
1180struct test19_VB4 { };
1181struct test19_B4: public test19_B3, public virtual test19_VB4 {
1182 virtual void foB1B4() { }
1183
1184 virtual void foB2B4() { }
1185
1186 virtual void foB3B4() { }
1187
1188 virtual void fB4() { }
1189};
1190
1191struct test19_D : virtual test19_B4 {
1192};
1193
1194
1195// CHECK-LP64: __ZTV8test19_D:
1196// CHECK-LP64-NEXT: .space 8
1197// CHECK-LP64-NEXT: .space 8
1198// CHECK-LP64-NEXT: .space 8
1199// CHECK-LP64-NEXT: .space 8
1200// CHECK-LP64-NEXT: .space 8
1201// CHECK-LP64-NEXT: .space 8
1202// CHECK-LP64-NEXT: .space 8
1203// CHECK-LP64-NEXT: .space 8
1204// CHECK-LP64-NEXT: .space 8
1205// CHECK-LP64-NEXT: .space 8
1206// CHECK-LP64-NEXT: .space 8
1207// CHECK-LP64-NEXT: .space 8
1208// CHECK-LP64-NEXT: .space 8
1209// CHECK-LP64-NEXT: .space 8
1210// CHECK-LP64-NEXT: .space 8
1211// CHECK-LP64-NEXT: .space 8
1212// CHECK-LP64-NEXT: .space 8
1213// CHECK-LP64-NEXT: .quad __ZTI8test19_D
1214// CHECK-LP64-NEXT .quad __ZN9test19_B13fB1Ev
1215// CHECK-LP64-NEXT .quad __ZN9test19_B26foB1B2Ev
1216// CHECK-LP64-NEXT .quad __ZN9test19_B36foB1B3Ev
1217// CHECK-LP64-NEXT .quad __ZN9test19_B46foB1B4Ev
1218// CHECK-LP64-NEXT .quad __ZN9test19_B23fB2Ev
1219// CHECK-LP64-NEXT .quad __ZN9test19_B36foB2B3Ev
1220// CHECK-LP64-NEXT .quad __ZN9test19_B46foB2B4Ev
1221// CHECK-LP64-NEXT .quad __ZN9test19_B33fB3Ev
1222// CHECK-LP64-NEXT .quad __ZN9test19_B46foB3B4Ev
1223// CHECK-LP64-NEXT .quad __ZN9test19_B43fB4Ev
1224
Mike Stump9c212892009-11-03 19:03:17 +00001225
Mike Stump7809e0d2009-10-28 00:35:46 +00001226
Mike Stump26899b02009-08-05 22:48:36 +00001227// CHECK-LP64: __ZTV1B:
Mike Stumpb46c92d2009-08-19 02:06:38 +00001228// CHECK-LP64-NEXT: .space 8
1229// CHECK-LP64-NEXT: .quad __ZTI1B
Mike Stump4ec04c42009-08-16 02:40:14 +00001230// CHECK-LP64-NEXT: .quad __ZN1B4bar1Ev
1231// CHECK-LP64-NEXT: .quad __ZN1B4bar2Ev
Mike Stump26899b02009-08-05 22:48:36 +00001232
1233// CHECK-LP32: __ZTV1B:
Mike Stumpb46c92d2009-08-19 02:06:38 +00001234// CHECK-LP32-NEXT: .space 4
1235// CHECK-LP32-NEXT: .long __ZTI1B
Mike Stump4ec04c42009-08-16 02:40:14 +00001236// CHECK-LP32-NEXT: .long __ZN1B4bar1Ev
1237// CHECK-LP32-NEXT: .long __ZN1B4bar2Ev
Mike Stump26899b02009-08-05 22:48:36 +00001238
Mike Stump06758d02009-08-04 20:37:29 +00001239// CHECK-LP64: __ZTV1A:
Mike Stump4ec04c42009-08-16 02:40:14 +00001240// CHECK-LP64-NEXT: .space 8
Mike Stumpb46c92d2009-08-19 02:06:38 +00001241// CHECK-LP64-NEXT: .quad __ZTI1A
Mike Stump4ec04c42009-08-16 02:40:14 +00001242// CHECK-LP64-NEXT: .quad __ZN1B4bar1Ev
1243// CHECK-LP64-NEXT: .quad __ZN1B4bar2Ev
1244// CHECK-LP64-NEXT: .quad __ZN1A4foo1Ev
1245// CHECK-LP64-NEXT: .quad __ZN1A4foo2Ev
Mike Stumpb46c92d2009-08-19 02:06:38 +00001246// CHECK-LP64-NEXT: .quad 18446744073709551600
Mike Stump4ec04c42009-08-16 02:40:14 +00001247// CHECK-LP64-NEXT: .quad __ZTI1A
1248// CHECK-LP64-NEXT: .quad __ZN1C4bee1Ev
1249// CHECK-LP64-NEXT: .quad __ZN1C4bee2Ev
Mike Stump06758d02009-08-04 20:37:29 +00001250
1251// CHECK-LP32: __ZTV1A:
Mike Stump4ec04c42009-08-16 02:40:14 +00001252// CHECK-LP32-NEXT: .space 4
Mike Stumpb46c92d2009-08-19 02:06:38 +00001253// CHECK-LP32-NEXT: .long __ZTI1A
Mike Stump4ec04c42009-08-16 02:40:14 +00001254// CHECK-LP32-NEXT: .long __ZN1B4bar1Ev
1255// CHECK-LP32-NEXT: .long __ZN1B4bar2Ev
1256// CHECK-LP32-NEXT: .long __ZN1A4foo1Ev
1257// CHECK-LP32-NEXT: .long __ZN1A4foo2Ev
Mike Stumpb46c92d2009-08-19 02:06:38 +00001258// CHECK-LP32-NEXT: .long 4294967284
Mike Stump4ec04c42009-08-16 02:40:14 +00001259// CHECK-LP32-NEXT: .long __ZTI1A
1260// CHECK-LP32-NEXT: .long __ZN1C4bee1Ev
1261// CHECK-LP32-NEXT: .long __ZN1C4bee2Ev
Mike Stump8a12b562009-08-06 15:50:11 +00001262
Mike Stump928f1502009-08-07 19:00:50 +00001263// CHECK-LP32:__ZTV1F:
Mike Stump4ec04c42009-08-16 02:40:14 +00001264// CHECK-LP32-NEXT: .space 4
1265// CHECK-LP32-NEXT: .long 8
1266// CHECK-LP32-NEXT: .space 4
1267// CHECK-LP32-NEXT: .space 4
Mike Stumpb46c92d2009-08-19 02:06:38 +00001268// CHECK-LP32-NEXT: .long __ZTI1F
Mike Stump4ec04c42009-08-16 02:40:14 +00001269// CHECK-LP32-NEXT: .long __ZN1D3booEv
1270// CHECK-LP32-NEXT: .long __ZN1F3fooEv
1271// CHECK-LP32-NEXT: .space 4
1272// CHECK-LP32-NEXT: .space 4
1273// CHECK-LP32-NEXT: .space 4
1274// CHECK-LP32-NEXT: .space 4
1275// CHECK-LP32-NEXT: .space 4
1276// CHECK-LP32-NEXT: .long 4294967288
1277// CHECK-LP32-NEXT: .long __ZTI1F
1278// CHECK-LP32-NEXT: .long __ZN2D13barEv
1279// CHECK-LP32-NEXT: .long __ZN2D14bar2Ev
1280// CHECK-LP32-NEXT: .long __ZN2D14bar3Ev
1281// CHECK-LP32-NEXT: .long __ZN2D14bar4Ev
1282// CHECK-LP32-NEXT: .long __ZN2D14bar5Ev
Mike Stump8a12b562009-08-06 15:50:11 +00001283
1284// CHECK-LP64: __ZTV1F:
Mike Stump4ec04c42009-08-16 02:40:14 +00001285// CHECK-LP64-NEXT: .space 8
1286// CHECK-LP64-NEXT: .quad 16
1287// CHECK-LP64-NEXT: .space 8
1288// CHECK-LP64-NEXT: .space 8
Mike Stumpb46c92d2009-08-19 02:06:38 +00001289// CHECK-LP64-NEXT: .quad __ZTI1F
Mike Stump4ec04c42009-08-16 02:40:14 +00001290// CHECK-LP64-NEXT: .quad __ZN1D3booEv
1291// CHECK-LP64-NEXT: .quad __ZN1F3fooEv
1292// CHECK-LP64-NEXT: .space 8
1293// CHECK-LP64-NEXT: .space 8
1294// CHECK-LP64-NEXT: .space 8
1295// CHECK-LP64-NEXT: .space 8
1296// CHECK-LP64-NEXT: .space 8
1297// CHECK-LP64-NEXT: .quad 18446744073709551600
1298// CHECK-LP64-NEXT: .quad __ZTI1F
1299// CHECK-LP64-NEXT: .quad __ZN2D13barEv
1300// CHECK-LP64-NEXT: .quad __ZN2D14bar2Ev
1301// CHECK-LP64-NEXT: .quad __ZN2D14bar3Ev
1302// CHECK-LP64-NEXT: .quad __ZN2D14bar4Ev
1303// CHECK-LP64-NEXT: .quad __ZN2D14bar5Ev
Mike Stump49520942009-08-11 04:03:59 +00001304
Mike Stump62db2452009-11-03 19:28:52 +00001305test19_D d19;
1306test18_D d18;
1307test17_D d17;
Mike Stump54150d92009-10-14 18:38:01 +00001308test16_D d16;
Mike Stumpd9878a12009-10-13 10:55:21 +00001309test15_D d15;
1310test13_D d13;
Mike Stumpb9871a22009-08-21 01:45:00 +00001311test11_D d11;
Mike Stumpb9837442009-08-20 07:22:17 +00001312test10_D d10;
Mike Stump09765ec2009-08-19 02:53:08 +00001313test9_D d9;
1314test8_D d8;
1315
Mike Stumpd76264e2009-08-12 21:50:08 +00001316test5_D d5;
Mike Stump34fae9c2009-08-12 18:50:26 +00001317test4_D d4;
1318test3_D d3;
Mike Stump78846782009-08-13 23:33:29 +00001319
1320test6_D d6;
1321test7_D d7;