blob: a85b2dfe477e3443aec2201a27427c4be20a0a83 [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;
Mike Stump941e3f32009-11-05 05:01:19 +000051void *vp;
Mike Stumpc5708d92009-08-06 14:12:47 +000052void test2() {
53 F f;
54 static int sz = (char *)(&f.f) - (char *)(&f);
Mike Stump941e3f32009-11-05 05:01:19 +000055 vp = &sz;
Mike Stumpc5708d92009-08-06 14:12:47 +000056 j = sz;
Mike Stump37148f42009-08-06 14:16:19 +000057 // FIXME: These should result in a frontend constant a la fold, no run time
58 // initializer
Mike Stump49520942009-08-11 04:03:59 +000059 // CHECK-LPOPT32: movl $4, __ZZ5test2vE2sz
60 // CHECK-LPOPT64: movl $8, __ZZ5test2vE2sz(%rip)
Mike Stumpc5708d92009-08-06 14:12:47 +000061}
Mike Stump8a12b562009-08-06 15:50:11 +000062
Mike Stumpc5708d92009-08-06 14:12:47 +000063static_assert(sizeof(F) == sizeof(void*)*4, "invalid vbase size");
64
Mike Stump2effeca2009-08-06 00:38:46 +000065struct E {
66 int e;
67};
68
69static_assert (sizeof (C) == (sizeof(void *)), "vtable pointer layout");
70
Mike Stumpeb19fa92009-08-06 13:41:24 +000071class A : public E, public B, public C {
Mike Stump3dee6ef2009-07-30 00:22:38 +000072public:
Mike Stump06758d02009-08-04 20:37:29 +000073 virtual void foo1();
74 virtual void foo2();
75 A() { }
Mike Stump2effeca2009-08-06 00:38:46 +000076 int a;
77} *ap;
Mike Stump6f376332009-08-05 22:37:18 +000078void A::foo1() { }
79void A::foo2() { }
Mike Stump3dee6ef2009-07-30 00:22:38 +000080
Mike Stump06758d02009-08-04 20:37:29 +000081int main() {
82 A a;
Mike Stump26899b02009-08-05 22:48:36 +000083 B b;
Mike Stump2effeca2009-08-06 00:38:46 +000084 ap->e = 1;
85 ap->b = 2;
Mike Stump06758d02009-08-04 20:37:29 +000086}
87
Mike Stump2effeca2009-08-06 00:38:46 +000088// CHECK-LP32: main:
89// CHECK-LP32: movl $1, 8(%eax)
90// CHECK-LP32: movl $2, 4(%eax)
91
92// CHECK-LP64: main:
93// CHECK-LP64: movl $1, 12(%rax)
94// CHECK-LP64: movl $2, 8(%rax)
95
Mike Stumpf0070db2009-08-26 20:46:33 +000096struct test12_A {
97 virtual void foo0() { }
98 virtual void foo();
99} *test12_pa;
100
101struct test12_B : public test12_A {
102 virtual void foo() { }
103} *test12_pb;
104
105struct test12_D : public test12_B {
106} *test12_pd;
107void test12_foo() {
108 test12_pa->foo0();
109 test12_pb->foo0();
110 test12_pd->foo0();
111 test12_pa->foo();
112 test12_pb->foo();
113 test12_pd->foo();
114 test12_pa->test12_A::foo();
115}
116
117// CHECK-LPOPT32:__Z10test12_foov:
118// CHECK-LPOPT32: movl _test12_pa, %eax
119// CHECK-LPOPT32-NEXT: movl (%eax), %ecx
120// CHECK-LPOPT32-NEXT: movl %eax, (%esp)
121// CHECK-LPOPT32-NEXT: call *(%ecx)
122// CHECK-LPOPT32-NEXT: movl _test12_pb, %eax
123// CHECK-LPOPT32-NEXT: movl (%eax), %ecx
124// CHECK-LPOPT32-NEXT: movl %eax, (%esp)
125// CHECK-LPOPT32-NEXT: call *(%ecx)
126// CHECK-LPOPT32-NEXT: movl _test12_pd, %eax
127// CHECK-LPOPT32-NEXT: movl (%eax), %ecx
128// CHECK-LPOPT32-NEXT: movl %eax, (%esp)
129// CHECK-LPOPT32-NEXT: call *(%ecx)
130// CHECK-LPOPT32-NEXT: movl _test12_pa, %eax
131// CHECK-LPOPT32-NEXT: movl (%eax), %ecx
132// CHECK-LPOPT32-NEXT: movl %eax, (%esp)
133// CHECK-LPOPT32-NEXT: call *4(%ecx)
134// CHECK-LPOPT32-NEXT: movl _test12_pb, %eax
135// CHECK-LPOPT32-NEXT: movl (%eax), %ecx
136// CHECK-LPOPT32-NEXT: movl %eax, (%esp)
137// CHECK-LPOPT32-NEXT: call *4(%ecx)
138// CHECK-LPOPT32-NEXT: movl _test12_pd, %eax
139// CHECK-LPOPT32-NEXT: movl (%eax), %ecx
140// CHECK-LPOPT32-NEXT: movl %eax, (%esp)
141// CHECK-LPOPT32-NEXT: call *4(%ecx)
Mike Stump63bb7c22009-08-26 23:38:08 +0000142// CHECK-LPOPT32-NEXT: movl _test12_pa, %eax
143// CHECK-LPOPT32-NEXT: movl %eax, (%esp)
144// CHECK-LPOPT32-NEXT: call L__ZN8test12_A3fooEv$stub
Mike Stumpf0070db2009-08-26 20:46:33 +0000145
146// CHECK-LPOPT64:__Z10test12_foov:
147// CHECK-LPOPT64: movq _test12_pa(%rip), %rdi
148// CHECK-LPOPT64-NEXT: movq (%rdi), %rax
149// CHECK-LPOPT64-NEXT: call *(%rax)
150// CHECK-LPOPT64-NEXT: movq _test12_pb(%rip), %rdi
151// CHECK-LPOPT64-NEXT: movq (%rdi), %rax
152// CHECK-LPOPT64-NEXT: call *(%rax)
153// CHECK-LPOPT64-NEXT: movq _test12_pd(%rip), %rdi
154// CHECK-LPOPT64-NEXT: movq (%rdi), %rax
155// CHECK-LPOPT64-NEXT: call *(%rax)
156// CHECK-LPOPT64-NEXT: movq _test12_pa(%rip), %rdi
157// CHECK-LPOPT64-NEXT: movq (%rdi), %rax
158// CHECK-LPOPT64-NEXT: call *8(%rax)
159// CHECK-LPOPT64-NEXT: movq _test12_pb(%rip), %rdi
160// CHECK-LPOPT64-NEXT: movq (%rdi), %rax
161// CHECK-LPOPT64-NEXT: call *8(%rax)
162// CHECK-LPOPT64-NEXT: movq _test12_pd(%rip), %rdi
163// CHECK-LPOPT64-NEXT: movq (%rdi), %rax
164// CHECK-LPOPT64-NEXT: call *8(%rax)
Mike Stump63bb7c22009-08-26 23:38:08 +0000165// CHECK-LPOPT64-NEXT: movq _test12_pa(%rip), %rdi
166// CHECK-LPOPT64-NEXT: call __ZN8test12_A3fooEv
Mike Stump49520942009-08-11 04:03:59 +0000167
Mike Stump941e3f32009-11-05 05:01:19 +0000168
Mike Stump94d0bce2009-08-13 00:34:14 +0000169struct test6_B2 { virtual void funcB2(); char b[1000]; };
170struct test6_B1 : virtual test6_B2 { virtual void funcB1(); };
171
172struct test6_D : test6_B2, virtual test6_B1 {
173};
174
Mike Stump16334272009-08-21 15:22:41 +0000175// CHECK-LP32: .zerofill __DATA, __common, _d6, 2012, 4
Mike Stump94d0bce2009-08-13 00:34:14 +0000176// CHECK-LP64: .zerofill __DATA, __common, _d6, 2024, 4
177
Mike Stump78846782009-08-13 23:33:29 +0000178struct test7_B2 { virtual void funcB2(); };
179struct test7_B1 : virtual test7_B2 { virtual void funcB1(); };
180
181struct test7_D : test7_B2, virtual test7_B1 {
182};
183
Mike Stump16334272009-08-21 15:22:41 +0000184// CHECK-LP32: .zerofill __DATA, __common, _d7, 8, 3
Mike Stump78846782009-08-13 23:33:29 +0000185// CHECK-LP64: .zerofill __DATA, __common, _d7, 16, 3
Mike Stump94d0bce2009-08-13 00:34:14 +0000186
187
Mike Stump49520942009-08-11 04:03:59 +0000188struct test3_B3 { virtual void funcB3(); };
189struct test3_B2 : virtual test3_B3 { virtual void funcB2(); };
190struct test3_B1 : virtual test3_B2 { virtual void funcB1(); };
191
Mike Stumpf0070db2009-08-26 20:46:33 +0000192struct test3_D : virtual test3_B1 {
Mike Stump49520942009-08-11 04:03:59 +0000193 virtual void funcD() { }
194};
195
196// CHECK-LP32:__ZTV7test3_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000197// CHECK-LP32-NEXT: .space 4
198// CHECK-LP32-NEXT: .space 4
199// CHECK-LP32-NEXT: .space 4
200// CHECK-LP32-NEXT: .space 4
201// CHECK-LP32-NEXT: .space 4
202// CHECK-LP32-NEXT: .space 4
203// CHECK-LP32-NEXT: .space 4
Mike Stump666a91e2009-08-21 18:05:02 +0000204// CHECK-LP32-NEXT: .long __ZTI7test3_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000205// CHECK-LP32-NEXT: .long __ZN8test3_B36funcB3Ev
206// CHECK-LP32-NEXT: .long __ZN8test3_B26funcB2Ev
207// CHECK-LP32-NEXT: .long __ZN8test3_B16funcB1Ev
208// CHECK-LP32-NEXT: .long __ZN7test3_D5funcDEv
Mike Stump49520942009-08-11 04:03:59 +0000209
210// CHECK-LP64:__ZTV7test3_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000211// CHECK-LP64-NEXT: .space 8
212// CHECK-LP64-NEXT: .space 8
213// CHECK-LP64-NEXT: .space 8
214// CHECK-LP64-NEXT: .space 8
215// CHECK-LP64-NEXT: .space 8
216// CHECK-LP64-NEXT: .space 8
217// CHECK-LP64-NEXT: .space 8
Mike Stump666a91e2009-08-21 18:05:02 +0000218// CHECK-LP64-NEXT: .quad __ZTI7test3_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000219// CHECK-LP64-NEXT: .quad __ZN8test3_B36funcB3Ev
220// CHECK-LP64-NEXT: .quad __ZN8test3_B26funcB2Ev
221// CHECK-LP64-NEXT: .quad __ZN8test3_B16funcB1Ev
222// CHECK-LP64-NEXT: .quad __ZN7test3_D5funcDEv
Mike Stump49520942009-08-11 04:03:59 +0000223
Mike Stump34fae9c2009-08-12 18:50:26 +0000224struct test4_D : virtual B, virtual C {
225};
226
227// CHECK-LP32:__ZTV7test4_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000228// CHECK-LP32-NEXT: .space 4
229// CHECK-LP32-NEXT: .long 4
230// CHECK-LP32-NEXT: .space 4
231// CHECK-LP32-NEXT: .space 4
232// CHECK-LP32-NEXT: .space 4
233// CHECK-LP32-NEXT: .long __ZTI7test4_D
234// CHECK-LP32-NEXT: .long __ZN1C4bee1Ev
235// CHECK-LP32-NEXT: .long __ZN1C4bee2Ev
236// CHECK-LP32-NEXT: .space 4
237// CHECK-LP32-NEXT: .space 4
238// CHECK-LP32-NEXT: .long 4294967292
239// CHECK-LP32-NEXT: .long __ZTI7test4_D
240// CHECK-LP32-NEXT: .long __ZN1B4bar1Ev
241// CHECK-LP32-NEXT: .long __ZN1B4bar2Ev
Mike Stump34fae9c2009-08-12 18:50:26 +0000242
243// CHECK-LP64:__ZTV7test4_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000244// CHECK-LP64-NEXT: .space 8
245// CHECK-LP64-NEXT: .quad 8
246// CHECK-LP64-NEXT: .space 8
247// CHECK-LP64-NEXT: .space 8
248// CHECK-LP64-NEXT: .space 8
249// CHECK-LP64-NEXT: .quad __ZTI7test4_D
250// CHECK-LP64-NEXT: .quad __ZN1C4bee1Ev
251// CHECK-LP64-NEXT: .quad __ZN1C4bee2Ev
252// CHECK-LP64-NEXT: .space 8
253// CHECK-LP64-NEXT: .space 8
254// CHECK-LP64-NEXT: .quad 18446744073709551608
255// CHECK-LP64-NEXT: .quad __ZTI7test4_D
256// CHECK-LP64-NEXT: .quad __ZN1B4bar1Ev
257// CHECK-LP64-NEXT: .quad __ZN1B4bar2Ev
Mike Stump34fae9c2009-08-12 18:50:26 +0000258
Mike Stump49520942009-08-11 04:03:59 +0000259
Mike Stumpd76264e2009-08-12 21:50:08 +0000260struct test5_B3 { virtual void funcB3(); };
261struct test5_B2 : virtual test5_B3 { virtual void funcB2(); };
262struct test5_B1 : virtual test5_B2 { virtual void funcB1(); };
263
264struct test5_B23 { virtual void funcB23(); };
265struct test5_B22 : virtual test5_B23 { virtual void funcB22(); };
266struct test5_B21 : virtual test5_B22 { virtual void funcB21(); };
267
268
269struct B232 { virtual void funcB232(); };
270struct B231 { virtual void funcB231(); };
271
272struct test5_B33 { virtual void funcB33(); };
273struct test5_B32 : virtual test5_B33, virtual B232 { virtual void funcB32(); };
274struct test5_B31 : virtual test5_B32, virtual B231 { virtual void funcB31(); };
275
276struct test5_D : virtual test5_B1, virtual test5_B21, virtual test5_B31 {
277 virtual void funcD() { }
278};
279
280// CHECK-LP32:__ZTV7test5_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000281// CHECK-LP32-NEXT: .long 16
282// CHECK-LP32-NEXT: .long 12
Mike Stumpfe3010d2009-08-16 19:04:13 +0000283// CHECK-LP32-NEXT: .long 8
284// CHECK-LP32-NEXT: .long 8
285// CHECK-LP32-NEXT: .long 8
286// CHECK-LP32-NEXT: .long 4
287// CHECK-LP32-NEXT: .long 4
288// CHECK-LP32-NEXT: .long 4
289// CHECK-LP32-NEXT: .space 4
Mike Stump4ec04c42009-08-16 02:40:14 +0000290// CHECK-LP32-NEXT: .space 4
291// CHECK-LP32-NEXT: .space 4
292// CHECK-LP32-NEXT: .space 4
293// CHECK-LP32-NEXT: .space 4
294// CHECK-LP32-NEXT: .space 4
295// CHECK-LP32-NEXT: .space 4
Mike Stumpb9837442009-08-20 07:22:17 +0000296// CHECK-LP32-NEXT: .long __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000297// CHECK-LP32-NEXT: .long __ZN8test5_B36funcB3Ev
298// CHECK-LP32-NEXT: .long __ZN8test5_B26funcB2Ev
299// CHECK-LP32-NEXT: .long __ZN8test5_B16funcB1Ev
300// CHECK-LP32-NEXT: .long __ZN7test5_D5funcDEv
Mike Stump4ec04c42009-08-16 02:40:14 +0000301// CHECK-LP32-NEXT: .space 4
302// CHECK-LP32-NEXT: .space 4
303// CHECK-LP32-NEXT: .space 4
304// CHECK-LP32-NEXT: .space 4
Mike Stump15a24e02009-08-28 23:22:54 +0000305// CHECK-LP32-NEXT: .space 4
Mike Stumpbf3fe202009-08-27 01:09:45 +0000306// CHECK-LP32-NEXT: .long 4294967292
Mike Stumpfe3010d2009-08-16 19:04:13 +0000307// CHECK-LP32-NEXT: .long __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000308// CHECK-LP32-NEXT: .long __ZN9test5_B237funcB23Ev
309// CHECK-LP32-NEXT: .long __ZN9test5_B227funcB22Ev
310// CHECK-LP32-NEXT: .long __ZN9test5_B217funcB21Ev
Mike Stump74be00b2009-09-01 22:01:25 +0000311// CHECK-LP32-NEXT: .space 4
Mike Stump6a9612f2009-10-31 20:06:59 +0000312// CHECK-LP32-NEXT: .long 8
313// CHECK-LP32-NEXT: .space 4
314// CHECK-LP32-NEXT: .space 4
315// CHECK-LP32-NEXT: .long 4
Mike Stump4ec04c42009-08-16 02:40:14 +0000316// CHECK-LP32-NEXT: .space 4
317// CHECK-LP32-NEXT: .space 4
Mike Stump9c88d982009-08-19 13:36:31 +0000318// CHECK-LP32-NEXT: .long 4294967288
Mike Stumpfe3010d2009-08-16 19:04:13 +0000319// CHECK-LP32-NEXT: .long __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000320// CHECK-LP32-NEXT: .long __ZN9test5_B337funcB33Ev
321// CHECK-LP32-NEXT: .long __ZN9test5_B327funcB32Ev
322// CHECK-LP32-NEXT: .long __ZN9test5_B317funcB31Ev
323// CHECK-LP32-NEXT: .space 4
324// CHECK-LP32-NEXT: .long 4294967284
325// CHECK-LP32-NEXT: .long __ZTI7test5_D
326// CHECK-LP32-NEXT: .long __ZN4B2328funcB232Ev
327// CHECK-LP32-NEXT: .space 4
Mike Stumpb9837442009-08-20 07:22:17 +0000328// CHECK-LP32-NEXT: .long 4294967280
Mike Stump4ec04c42009-08-16 02:40:14 +0000329// CHECK-LP32-NEXT: .long __ZTI7test5_D
330// CHECK-LP32-NEXT: .long __ZN4B2318funcB231Ev
Mike Stumpd76264e2009-08-12 21:50:08 +0000331
332// CHECK-LP64:__ZTV7test5_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000333// CHECK-LP64-NEXT: .quad 32
334// CHECK-LP64-NEXT: .quad 24
Mike Stumpfe3010d2009-08-16 19:04:13 +0000335// CHECK-LP64-NEXT: .quad 16
336// CHECK-LP64-NEXT: .quad 16
337// CHECK-LP64-NEXT: .quad 16
338// CHECK-LP64-NEXT: .quad 8
339// CHECK-LP64-NEXT: .quad 8
340// CHECK-LP64-NEXT: .quad 8
341// CHECK-LP64-NEXT: .space 8
Mike Stump4ec04c42009-08-16 02:40:14 +0000342// CHECK-LP64-NEXT: .space 8
343// CHECK-LP64-NEXT: .space 8
344// CHECK-LP64-NEXT: .space 8
345// CHECK-LP64-NEXT: .space 8
346// CHECK-LP64-NEXT: .space 8
347// CHECK-LP64-NEXT: .space 8
Mike Stumpb9837442009-08-20 07:22:17 +0000348// CHECK-LP64-NEXT: .quad __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000349// CHECK-LP64-NEXT: .quad __ZN8test5_B36funcB3Ev
350// CHECK-LP64-NEXT: .quad __ZN8test5_B26funcB2Ev
351// CHECK-LP64-NEXT: .quad __ZN8test5_B16funcB1Ev
352// CHECK-LP64-NEXT: .quad __ZN7test5_D5funcDEv
Mike Stump4ec04c42009-08-16 02:40:14 +0000353// CHECK-LP64-NEXT: .space 8
354// CHECK-LP64-NEXT: .space 8
355// CHECK-LP64-NEXT: .space 8
356// CHECK-LP64-NEXT: .space 8
Mike Stump15a24e02009-08-28 23:22:54 +0000357// CHECK-LP64-NEXT: .space 8
Mike Stumpbf3fe202009-08-27 01:09:45 +0000358// CHECK-LP64-NEXT: .quad 18446744073709551608
Mike Stumpfe3010d2009-08-16 19:04:13 +0000359// CHECK-LP64-NEXT: .quad __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000360// CHECK-LP64-NEXT: .quad __ZN9test5_B237funcB23Ev
361// CHECK-LP64-NEXT: .quad __ZN9test5_B227funcB22Ev
362// CHECK-LP64-NEXT: .quad __ZN9test5_B217funcB21Ev
Mike Stump74be00b2009-09-01 22:01:25 +0000363// CHECK-LP64-NEXT: .space 8
Mike Stump6a9612f2009-10-31 20:06:59 +0000364// CHECK-LP64-NEXT: .quad 16
365// CHECK-LP64-NEXT: .space 8
366// CHECK-LP64-NEXT: .space 8
367// CHECK-LP64-NEXT: .quad 8
Mike Stump4ec04c42009-08-16 02:40:14 +0000368// CHECK-LP64-NEXT: .space 8
369// CHECK-LP64-NEXT: .space 8
Mike Stump74be00b2009-09-01 22:01:25 +0000370// CHECK-LP64-NEXT: .quad 18446744073709551600
Mike Stumpfe3010d2009-08-16 19:04:13 +0000371// CHECK-LP64-NEXT: .quad __ZTI7test5_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000372// CHECK-LP64-NEXT: .quad __ZN9test5_B337funcB33Ev
373// CHECK-LP64-NEXT: .quad __ZN9test5_B327funcB32Ev
374// CHECK-LP64-NEXT: .quad __ZN9test5_B317funcB31Ev
375// CHECK-LP64-NEXT: .space 8
376// CHECK-LP64-NEXT: .quad 18446744073709551592
377// CHECK-LP64-NEXT: .quad __ZTI7test5_D
378// CHECK-LP64-NEXT: .quad __ZN4B2328funcB232Ev
379// CHECK-LP64-NEXT: .space 8
Mike Stumpb9837442009-08-20 07:22:17 +0000380// CHECK-LP64-NEXT: .quad 18446744073709551584
Mike Stump4ec04c42009-08-16 02:40:14 +0000381// CHECK-LP64-NEXT: .quad __ZTI7test5_D
382// CHECK-LP64-NEXT: .quad __ZN4B2318funcB231Ev
Mike Stumpd76264e2009-08-12 21:50:08 +0000383
Mike Stump276b9f12009-08-16 01:46:26 +0000384struct test8_B1 {
385 virtual void ftest8_B1() { }
386};
387struct test8_B2aa {
388 virtual void ftest8_B2aa() { }
389 int i;
390};
391struct test8_B2ab {
392 virtual void ftest8_B2ab() { }
393 int i;
394};
395struct test8_B2a : virtual test8_B2aa, virtual test8_B2ab {
396 virtual void ftest8_B2a() { }
397};
398struct test8_B2b {
399 virtual void ftest8_B2b() { }
400};
401struct test8_B2 : test8_B2a, test8_B2b {
402 virtual void ftest8_B2() { }
403};
404struct test8_B3 {
405 virtual void ftest8_B3() { }
406};
407class test8_D : test8_B1, test8_B2, test8_B3 {
Mike Stump09765ec2009-08-19 02:53:08 +0000408};
Mike Stump276b9f12009-08-16 01:46:26 +0000409
410// CHECK-LP32:__ZTV7test8_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000411// CHECK-LP32-NEXT: .long 24
412// CHECK-LP32-NEXT: .long 16
413// CHECK-LP32-NEXT: .space 4
Mike Stumpb46c92d2009-08-19 02:06:38 +0000414// CHECK-LP32-NEXT: .long __ZTI7test8_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000415// CHECK-LP32-NEXT: .long __ZN8test8_B19ftest8_B1Ev
416// CHECK-LP32-NEXT: .long 20
417// CHECK-LP32-NEXT: .long 12
Mike Stump7fa0d932009-08-20 02:11:48 +0000418// CHECK-LP32-NEXT: .long 4294967292
Mike Stump4ec04c42009-08-16 02:40:14 +0000419// CHECK-LP32-NEXT: .long __ZTI7test8_D
420// CHECK-LP32-NEXT: .long __ZN9test8_B2a10ftest8_B2aEv
421// CHECK-LP32-NEXT: .long __ZN8test8_B29ftest8_B2Ev
Mike Stumpb46c92d2009-08-19 02:06:38 +0000422// CHECK-LP32-NEXT: .long 4294967288
Mike Stump4ec04c42009-08-16 02:40:14 +0000423// CHECK-LP32-NEXT: .long __ZTI7test8_D
424// CHECK-LP32-NEXT: .long __ZN9test8_B2b10ftest8_B2bEv
Mike Stumpb46c92d2009-08-19 02:06:38 +0000425// CHECK-LP32-NEXT: .long 4294967284
Mike Stump4ec04c42009-08-16 02:40:14 +0000426// CHECK-LP32-NEXT: .long __ZTI7test8_D
427// CHECK-LP32-NEXT: .long __ZN8test8_B39ftest8_B3Ev
428// CHECK-LP32-NEXT: .space 4
429// CHECK-LP32-NEXT: .long 4294967280
430// CHECK-LP32-NEXT: .long __ZTI7test8_D
431// CHECK-LP32-NEXT: .long __ZN10test8_B2aa11ftest8_B2aaEv
432// CHECK-LP32-NEXT: .space 4
433// CHECK-LP32-NEXT: .long 4294967272
434// CHECK-LP32-NEXT: .long __ZTI7test8_D
435// CHECK-LP32-NEXT: .long __ZN10test8_B2ab11ftest8_B2abEv
Mike Stump276b9f12009-08-16 01:46:26 +0000436
437// CHECK-LP64:__ZTV7test8_D:
Mike Stump4ec04c42009-08-16 02:40:14 +0000438// CHECK-LP64-NEXT: .quad 48
439// CHECK-LP64-NEXT: .quad 32
440// CHECK-LP64-NEXT: .space 8
Mike Stumpb46c92d2009-08-19 02:06:38 +0000441// CHECK-LP64-NEXT: .quad __ZTI7test8_D
Mike Stump4ec04c42009-08-16 02:40:14 +0000442// CHECK-LP64-NEXT: .quad __ZN8test8_B19ftest8_B1Ev
443// CHECK-LP64-NEXT: .quad 40
444// CHECK-LP64-NEXT: .quad 24
Mike Stump7fa0d932009-08-20 02:11:48 +0000445// CHECK-LP64-NEXT: .quad 18446744073709551608
Mike Stump4ec04c42009-08-16 02:40:14 +0000446// CHECK-LP64-NEXT: .quad __ZTI7test8_D
447// CHECK-LP64-NEXT: .quad __ZN9test8_B2a10ftest8_B2aEv
448// CHECK-LP64-NEXT: .quad __ZN8test8_B29ftest8_B2Ev
Mike Stumpb46c92d2009-08-19 02:06:38 +0000449// CHECK-LP64-NEXT: .quad 18446744073709551600
Mike Stump4ec04c42009-08-16 02:40:14 +0000450// CHECK-LP64-NEXT: .quad __ZTI7test8_D
451// CHECK-LP64-NEXT: .quad __ZN9test8_B2b10ftest8_B2bEv
Mike Stumpb46c92d2009-08-19 02:06:38 +0000452// CHECK-LP64-NEXT: .quad 18446744073709551592
Mike Stump4ec04c42009-08-16 02:40:14 +0000453// CHECK-LP64-NEXT: .quad __ZTI7test8_D
454// CHECK-LP64-NEXT: .quad __ZN8test8_B39ftest8_B3Ev
455// CHECK-LP64-NEXT: .space 8
456// CHECK-LP64-NEXT: .quad 18446744073709551584
457// CHECK-LP64-NEXT: .quad __ZTI7test8_D
458// CHECK-LP64-NEXT: .quad __ZN10test8_B2aa11ftest8_B2aaEv
459// CHECK-LP64-NEXT: .space 8
460// CHECK-LP64-NEXT: .quad 18446744073709551568
461// CHECK-LP64-NEXT: .quad __ZTI7test8_D
462// CHECK-LP64-NEXT: .quad __ZN10test8_B2ab11ftest8_B2abEv
Mike Stumpd76264e2009-08-12 21:50:08 +0000463
Mike Stump49520942009-08-11 04:03:59 +0000464
Mike Stump09765ec2009-08-19 02:53:08 +0000465struct test9_B3 { virtual void funcB3(); int i; };
466struct test9_B2 : virtual test9_B3 { virtual void funcB2(); int i; };
467struct test9_B1 : virtual test9_B2 { virtual void funcB1(); int i; };
468
469struct test9_B23 { virtual void funcB23(); int i; };
470struct test9_B22 : virtual test9_B23 { virtual void funcB22(); int i; };
471struct test9_B21 : virtual test9_B22 { virtual void funcB21(); int i; };
472
473
474struct test9_B232 { virtual void funcB232(); int i; };
475struct test9_B231 { virtual void funcB231(); int i; };
476
477struct test9_B33 { virtual void funcB33(); int i; };
478struct test9_B32 : virtual test9_B33, virtual test9_B232 { virtual void funcB32(); int i; };
479struct test9_B31 : virtual test9_B32, virtual test9_B231 { virtual void funcB31(); int i; };
480
481struct test9_D : virtual test9_B1, virtual test9_B21, virtual test9_B31 {
482 virtual void funcD() { }
483};
484
485// CHECK-LP64: __ZTV7test9_D:
486// CHECK-LP64-NEXT: .quad 168
487// CHECK-LP64-NEXT: .quad 152
488// CHECK-LP64-NEXT: .quad 136
489// CHECK-LP64-NEXT: .quad 120
490// CHECK-LP64-NEXT: .quad 104
491// CHECK-LP64-NEXT: .quad 88
492// CHECK-LP64-NEXT: .quad 72
493// CHECK-LP64-NEXT: .quad 56
494// CHECK-LP64-NEXT: .quad 40
495// CHECK-LP64-NEXT: .quad 24
496// CHECK-LP64-NEXT: .quad 8
497// CHECK-LP64-NEXT: .space 8
498// CHECK-LP64-NEXT: .quad __ZTI7test9_D
499// CHECK-LP64-NEXT: .quad __ZN7test9_D5funcDEv
500// CHECK-LP64-NEXT: .space 8
501// CHECK-LP64-NEXT: .quad 32
502// CHECK-LP64-NEXT: .quad 16
503// CHECK-LP64-NEXT: .quad 18446744073709551608
504// CHECK-LP64-NEXT: .quad __ZTI7test9_D
505// CHECK-LP64-NEXT: .quad __ZN8test9_B16funcB1Ev
506// CHECK-LP64-NEXT: .space 8
507// CHECK-LP64-NEXT: .quad 16
508// CHECK-LP64-NEXT: .quad 18446744073709551592
509// CHECK-LP64-NEXT: .quad __ZTI7test9_D
510// CHECK-LP64-NEXT: .quad __ZN8test9_B26funcB2Ev
511// CHECK-LP64-NEXT: .space 8
512// CHECK-LP64-NEXT: .quad 18446744073709551576
513// CHECK-LP64-NEXT: .quad __ZTI7test9_D
514// CHECK-LP64-NEXT: .quad __ZN8test9_B36funcB3Ev
515// CHECK-LP64-NEXT: .space 8
516// CHECK-LP64-NEXT: .quad 32
517// CHECK-LP64-NEXT: .quad 16
518// CHECK-LP64-NEXT: .quad 18446744073709551560
519// CHECK-LP64-NEXT: .quad __ZTI7test9_D
520// CHECK-LP64-NEXT: .quad __ZN9test9_B217funcB21Ev
521// CHECK-LP64-NEXT: .space 8
522// CHECK-LP64-NEXT: .quad 16
523// CHECK-LP64-NEXT: .quad 18446744073709551544
524// CHECK-LP64-NEXT: .quad __ZTI7test9_D
525// CHECK-LP64-NEXT: .quad __ZN9test9_B227funcB22Ev
526// CHECK-LP64-NEXT: .space 8
527// CHECK-LP64-NEXT: .quad 18446744073709551528
528// CHECK-LP64-NEXT: .quad __ZTI7test9_D
529// CHECK-LP64-NEXT: .quad __ZN9test9_B237funcB23Ev
530// CHECK-LP64-NEXT: .space 8
531// CHECK-LP64-NEXT: .quad 64
532// CHECK-LP64-NEXT: .quad 48
533// CHECK-LP64-NEXT: .quad 32
534// CHECK-LP64-NEXT: .quad 16
535// CHECK-LP64-NEXT: .quad 18446744073709551512
536// CHECK-LP64-NEXT: .quad __ZTI7test9_D
537// CHECK-LP64-NEXT: .quad __ZN9test9_B317funcB31Ev
538// CHECK-LP64-NEXT: .space 8
539// CHECK-LP64-NEXT: .quad 32
540// CHECK-LP64-NEXT: .quad 16
541// CHECK-LP64-NEXT: .quad 18446744073709551496
542// CHECK-LP64-NEXT: .quad __ZTI7test9_D
543// CHECK-LP64-NEXT: .quad __ZN9test9_B327funcB32Ev
544// CHECK-LP64-NEXT: .space 8
545// CHECK-LP64-NEXT: .quad 18446744073709551480
546// CHECK-LP64-NEXT: .quad __ZTI7test9_D
547// CHECK-LP64-NEXT: .quad __ZN9test9_B337funcB33Ev
548// CHECK-LP64-NEXT: .space 8
549// CHECK-LP64-NEXT: .quad 18446744073709551464
550// CHECK-LP64-NEXT: .quad __ZTI7test9_D
551// CHECK-LP64-NEXT: .quad __ZN10test9_B2328funcB232Ev
552// CHECK-LP64-NEXT: .space 8
553// CHECK-LP64-NEXT: .quad 18446744073709551448
554// CHECK-LP64-NEXT: .quad __ZTI7test9_D
555// CHECK-LP64-NEXT: .quad __ZN10test9_B2318funcB231Ev
556
557// CHECK-LP32: __ZTV7test9_D:
558// CHECK-LP32-NEXT: .long 84
559// CHECK-LP32-NEXT: .long 76
560// CHECK-LP32-NEXT: .long 68
561// CHECK-LP32-NEXT: .long 60
562// CHECK-LP32-NEXT: .long 52
563// CHECK-LP32-NEXT: .long 44
564// CHECK-LP32-NEXT: .long 36
565// CHECK-LP32-NEXT: .long 28
566// CHECK-LP32-NEXT: .long 20
567// CHECK-LP32-NEXT: .long 12
568// CHECK-LP32-NEXT: .long 4
569// CHECK-LP32-NEXT: .space 4
570// CHECK-LP32-NEXT: .long __ZTI7test9_D
571// CHECK-LP32-NEXT: .long __ZN7test9_D5funcDEv
572// CHECK-LP32-NEXT: .space 4
573// CHECK-LP32-NEXT: .long 16
574// CHECK-LP32-NEXT: .long 8
575// CHECK-LP32-NEXT: .long 4294967292
576// CHECK-LP32-NEXT: .long __ZTI7test9_D
577// CHECK-LP32-NEXT: .long __ZN8test9_B16funcB1Ev
578// CHECK-LP32-NEXT: .space 4
579// CHECK-LP32-NEXT: .long 8
580// CHECK-LP32-NEXT: .long 4294967284
581// CHECK-LP32-NEXT: .long __ZTI7test9_D
582// CHECK-LP32-NEXT: .long __ZN8test9_B26funcB2Ev
583// CHECK-LP32-NEXT: .space 4
584// CHECK-LP32-NEXT: .long 4294967276
585// CHECK-LP32-NEXT: .long __ZTI7test9_D
586// CHECK-LP32-NEXT: .long __ZN8test9_B36funcB3Ev
587// CHECK-LP32-NEXT: .space 4
588// CHECK-LP32-NEXT: .long 16
589// CHECK-LP32-NEXT: .long 8
590// CHECK-LP32-NEXT: .long 4294967268
591// CHECK-LP32-NEXT: .long __ZTI7test9_D
592// CHECK-LP32-NEXT: .long __ZN9test9_B217funcB21Ev
593// CHECK-LP32-NEXT: .space 4
594// CHECK-LP32-NEXT: .long 8
595// CHECK-LP32-NEXT: .long 4294967260
596// CHECK-LP32-NEXT: .long __ZTI7test9_D
597// CHECK-LP32-NEXT: .long __ZN9test9_B227funcB22Ev
598// CHECK-LP32-NEXT: .space 4
599// CHECK-LP32-NEXT: .long 4294967252
600// CHECK-LP32-NEXT: .long __ZTI7test9_D
601// CHECK-LP32-NEXT: .long __ZN9test9_B237funcB23Ev
602// CHECK-LP32-NEXT: .space 4
603// CHECK-LP32-NEXT: .long 32
604// CHECK-LP32-NEXT: .long 24
605// CHECK-LP32-NEXT: .long 16
606// CHECK-LP32-NEXT: .long 8
607// CHECK-LP32-NEXT: .long 4294967244
608// CHECK-LP32-NEXT: .long __ZTI7test9_D
609// CHECK-LP32-NEXT: .long __ZN9test9_B317funcB31Ev
610// CHECK-LP32-NEXT: .space 4
611// CHECK-LP32-NEXT: .long 16
612// CHECK-LP32-NEXT: .long 8
613// CHECK-LP32-NEXT: .long 4294967236
614// CHECK-LP32-NEXT: .long __ZTI7test9_D
615// CHECK-LP32-NEXT: .long __ZN9test9_B327funcB32Ev
616// CHECK-LP32-NEXT: .space 4
617// CHECK-LP32-NEXT: .long 4294967228
618// CHECK-LP32-NEXT: .long __ZTI7test9_D
619// CHECK-LP32-NEXT: .long __ZN9test9_B337funcB33Ev
620// CHECK-LP32-NEXT: .space 4
621// CHECK-LP32-NEXT: .long 4294967220
622// CHECK-LP32-NEXT: .long __ZTI7test9_D
623// CHECK-LP32-NEXT: .long __ZN10test9_B2328funcB232Ev
624// CHECK-LP32-NEXT: .space 4
625// CHECK-LP32-NEXT: .long 4294967212
626// CHECK-LP32-NEXT: .long __ZTI7test9_D
627// CHECK-LP32-NEXT: .long __ZN10test9_B2318funcB231Ev
628
Mike Stumpb9837442009-08-20 07:22:17 +0000629struct test10_O { int i; };
630
631struct test10_B1 : virtual test10_O {
632 virtual void ftest10_B1() { }
633};
634
635struct test10_B2aa : virtual test10_O {
636 int i;
637};
638struct test10_B2ab : virtual test10_O {
639 int i;
640};
641struct test10_B2a : virtual test10_B2aa, virtual test10_B2ab,virtual test10_O {
642 virtual void ftest10_B2a() { }
643};
644struct test10_B2b : virtual test10_O {
645 virtual void ftest10_B2b() { }
646};
647struct test10_B2 : test10_B2a {
648 virtual void ftest10_B2() { }
649};
650class test10_D : test10_B1, test10_B2 {
651
652 void ftest10_B2aa() { }
653};
654
655// CHECK-LP64:__ZTV8test10_D:
656// CHECK-LP64-NEXT: .quad 40
657// CHECK-LP64-NEXT: .quad 24
658// CHECK-LP64-NEXT: .quad 16
659// CHECK-LP64-NEXT: .space 8
660// CHECK-LP64-NEXT: .quad __ZTI8test10_D
661// CHECK-LP64-NEXT: .quad __ZN9test10_B110ftest10_B1Ev
662// CHECK-LP64-NEXT: .quad 32
663// CHECK-LP64-NEXT: .quad 8
664// CHECK-LP64-NEXT: .quad 16
665// CHECK-LP64-NEXT: .quad 18446744073709551608
666// CHECK-LP64-NEXT: .quad __ZTI8test10_D
667// CHECK-LP64-NEXT: .quad __ZN10test10_B2a11ftest10_B2aEv
668// CHECK-LP64-NEXT: .quad __ZN9test10_B210ftest10_B2Ev
669// CHECK-LP64-NEXT: .quad 18446744073709551608
670// CHECK-LP64-NEXT: .quad 18446744073709551592
671// CHECK-LP64-NEXT: .quad __ZTI8test10_D
672// CHECK-LP64-NEXT: .quad 18446744073709551592
673// CHECK-LP64-NEXT: .quad 18446744073709551576
674// CHECK-LP64-NEXT: .quad __ZTI8test10_D
675
676// CHECK-LP32: __ZTV8test10_D:
677// CHECK-LP32-NEXT: .long 20
678// CHECK-LP32-NEXT: .long 12
679// CHECK-LP32-NEXT: .long 8
680// CHECK-LP32-NEXT: .space 4
681// CHECK-LP32-NEXT: .long __ZTI8test10_D
682// CHECK-LP32-NEXT: .long __ZN9test10_B110ftest10_B1Ev
683// CHECK-LP32-NEXT: .long 16
684// CHECK-LP32-NEXT: .long 4
685// CHECK-LP32-NEXT: .long 8
686// CHECK-LP32-NEXT: .long 4294967292
687// CHECK-LP32-NEXT: .long __ZTI8test10_D
688// CHECK-LP32-NEXT: .long __ZN10test10_B2a11ftest10_B2aEv
689// CHECK-LP32-NEXT: .long __ZN9test10_B210ftest10_B2Ev
690// CHECK-LP32-NEXT: .long 4294967292
691// CHECK-LP32-NEXT: .long 4294967284
692// CHECK-LP32-NEXT: .long __ZTI8test10_D
693// CHECK-LP32-NEXT: .long 4294967284
694// CHECK-LP32-NEXT: .long 4294967276
695// CHECK-LP32-NEXT: .long __ZTI8test10_D
696
Mike Stumpb9871a22009-08-21 01:45:00 +0000697struct test11_B {
698 virtual void B1() { }
699 virtual void D() { }
700 virtual void B2() { }
701};
702
703struct test11_D : test11_B {
704 virtual void D1() { }
705 virtual void D() { }
706 virtual void D2() { }
707};
708
709// CHECK-LP32:__ZTV8test11_D:
710// CHECK-LP32-NEXT: .space 4
711// CHECK-LP32-NEXT: .long __ZTI8test11_D
712// CHECK-LP32-NEXT: .long __ZN8test11_B2B1Ev
713// CHECK-LP32-NEXT: .long __ZN8test11_D1DEv
714// CHECK-LP32-NEXT: .long __ZN8test11_B2B2Ev
715// CHECK-LP32-NEXT: .long __ZN8test11_D2D1Ev
716// CHECK-LP32-NEXT: .long __ZN8test11_D2D2Ev
717
718
719// CHECK-LP64:__ZTV8test11_D:
720// CHECK-LP64-NEXT: .space 8
721// CHECK-LP64-NEXT: .quad __ZTI8test11_D
722// CHECK-LP64-NEXT: .quad __ZN8test11_B2B1Ev
723// CHECK-LP64-NEXT: .quad __ZN8test11_D1DEv
724// CHECK-LP64-NEXT: .quad __ZN8test11_B2B2Ev
725// CHECK-LP64-NEXT: .quad __ZN8test11_D2D1Ev
726// CHECK-LP64-NEXT: .quad __ZN8test11_D2D2Ev
Mike Stumpb9837442009-08-20 07:22:17 +0000727
Mike Stumpdec025b2009-09-07 04:27:52 +0000728struct test13_B {
729 virtual void B1() { }
730 virtual void D() { }
731 virtual void Da();
732 virtual void Db() { }
733 virtual void Dc() { }
734 virtual void B2() { }
735 int i;
736};
737
738
739struct test13_NV1 {
740 virtual void fooNV1() { }
741 virtual void D() { }
742};
743
744
745struct test13_B2 : /* test13_NV1, */ virtual test13_B {
746 virtual void B2a() { }
747 virtual void B2() { }
748 virtual void D() { }
749 virtual void Da();
750 virtual void Dd() { }
751 virtual void B2b() { }
752 int i;
753};
754
755
756struct test13_D : test13_NV1, virtual test13_B2 {
757 virtual void D1() { }
758 virtual void D() { }
759 virtual void Db() { }
760 virtual void Dd() { }
761 virtual void D2() { }
762 virtual void fooNV1() { }
Mike Stumpd9878a12009-10-13 10:55:21 +0000763};
Mike Stumpdec025b2009-09-07 04:27:52 +0000764
765// CHECK-LP64:__ZTV8test13_D:
766// CHECK-LP64-NEXT: .quad 24
767// CHECK-LP64-NEXT: .quad 8
768// CHECK-LP64-NEXT: .space 8
769// CHECK-LP64-NEXT: .quad __ZTI8test13_D
770// CHECK-LP64-NEXT: .quad __ZN8test13_D6fooNV1Ev
771// CHECK-LP64-NEXT: .quad __ZN8test13_D1DEv
772// CHECK-LP64-NEXT: .quad __ZN8test13_D2D1Ev
773// CHECK-LP64-NEXT: .quad __ZN8test13_D2DbEv
774// CHECK-LP64-NEXT: .quad __ZN8test13_D2DdEv
775// CHECK-LP64-NEXT: .quad __ZN8test13_D2D2Ev
776// CHECK-LP64-NEXT: .space 8
777// CHECK-LP64-NEXT: .quad 18446744073709551608
778// CHECK-LP64-NEXT: .space 8
779// CHECK-LP64-NEXT: .quad 18446744073709551608
780// CHECK-LP64-NEXT: .space 8
781// CHECK-LP64-NEXT: .space 8
782// CHECK-LP64-NEXT: .quad 16
783// CHECK-LP64-NEXT: .quad 18446744073709551608
784// CHECK-LP64-NEXT: .quad __ZTI8test13_D
785// CHECK-LP64-NEXT: .quad __ZN9test13_B23B2aEv
786// CHECK-LP64-NEXT: .quad __ZN9test13_B22B2Ev
787// CHECK-LP64-NEXT: .quad __ZTv0_n48_N8test13_D1DEv
788// CHECK-LP64-NEXT: .quad __ZN9test13_B22DaEv
789// CHECK-LP64-NEXT: .quad __ZTv0_n64_N8test13_D2DdEv
790// CHECK-LP64-NEXT: .quad __ZN9test13_B23B2bEv
791// CHECK-LP64-NEXT: .quad 18446744073709551600
792// CHECK-LP64-NEXT: .space 8
793// CHECK-LP64-NEXT: .quad 18446744073709551592
794// CHECK-LP64-NEXT: .quad 18446744073709551600
795// CHECK-LP64-NEXT: .quad 18446744073709551592
796// CHECK-LP64-NEXT: .space 8
797// CHECK-LP64-NEXT: .quad 18446744073709551592
798// CHECK-LP64-NEXT: .quad __ZTI8test13_D
799// CHECK-LP64-NEXT: .quad __ZN8test13_B2B1Ev
800// CHECK-LP64-NEXT: .quad __ZTv0_n32_N8test13_D1DEv
801// CHECK-LP64-NEXT: .quad __ZTv0_n40_N9test13_B22DaEv
802// CHECK-LP64-NEXT: .quad __ZTv0_n48_N8test13_D2DbEv
803// CHECK-LP64-NEXT: .quad __ZN8test13_B2DcEv
804// CHECK-LP64-NEXT: .quad __ZTv0_n64_N9test13_B22B2Ev
805
806// CHECK-LP32:__ZTV8test13_D:
807// CHECK-LP32-NEXT: .long 12
808// CHECK-LP32-NEXT: .long 4
809// CHECK-LP32-NEXT: .space 4
810// CHECK-LP32-NEXT: .long __ZTI8test13_D
811// CHECK-LP32-NEXT: .long __ZN8test13_D6fooNV1Ev
812// CHECK-LP32-NEXT: .long __ZN8test13_D1DEv
813// CHECK-LP32-NEXT: .long __ZN8test13_D2D1Ev
814// CHECK-LP32-NEXT: .long __ZN8test13_D2DbEv
815// CHECK-LP32-NEXT: .long __ZN8test13_D2DdEv
816// CHECK-LP32-NEXT: .long __ZN8test13_D2D2Ev
817// CHECK-LP32-NEXT: .space 4
818// CHECK-LP32-NEXT: .long 4294967292
819// CHECK-LP32-NEXT: .space 4
820// CHECK-LP32-NEXT: .long 4294967292
821// CHECK-LP32-NEXT: .space 4
822// CHECK-LP32-NEXT: .space 4
823// CHECK-LP32-NEXT: .long 8
824// CHECK-LP32-NEXT: .long 4294967292
825// CHECK-LP32-NEXT: .long __ZTI8test13_D
826// CHECK-LP32-NEXT: .long __ZN9test13_B23B2aEv
827// CHECK-LP32-NEXT: .long __ZN9test13_B22B2Ev
828// CHECK-LP32-NEXT: .long __ZTv0_n24_N8test13_D1DEv
829// CHECK-LP32-NEXT: .long __ZN9test13_B22DaEv
830// CHECK-LP32-NEXT: .long __ZTv0_n32_N8test13_D2DdEv
831// CHECK-LP32-NEXT: .long __ZN9test13_B23B2bEv
832// CHECK-LP32-NEXT: .long 4294967288
833// CHECK-LP32-NEXT: .space 4
834// CHECK-LP32-NEXT: .long 4294967284
835// CHECK-LP32-NEXT: .long 4294967288
836// CHECK-LP32-NEXT: .long 4294967284
837// CHECK-LP32-NEXT: .space 4
838// CHECK-LP32-NEXT: .long 4294967284
839// CHECK-LP32-NEXT: .long __ZTI8test13_D
840// CHECK-LP32-NEXT: .long __ZN8test13_B2B1Ev
841// CHECK-LP32-NEXT: .long __ZTv0_n16_N8test13_D1DEv
842// CHECK-LP32-NEXT: .long __ZTv0_n20_N9test13_B22DaEv
843// CHECK-LP32-NEXT: .long __ZTv0_n24_N8test13_D2DbEv
844// CHECK-LP32-NEXT: .long __ZN8test13_B2DcEv
845// CHECK-LP32-NEXT: .long __ZTv0_n32_N9test13_B22B2Ev
846
Mike Stump09765ec2009-08-19 02:53:08 +0000847
Mike Stumpd9878a12009-10-13 10:55:21 +0000848class test14 {
849public:
850 virtual void initWithInt(int a);
851 static test14 *withInt(int a);
852};
853
854void test14::initWithInt(int a) { }
855
856test14 *test14::withInt(int a) {
857 test14 *me = new test14;
858 me->initWithInt(a);
859 return me;
860}
861
862
863struct test15_B {
864 virtual test15_B *foo1() { return 0; }
865 virtual test15_B *foo2() { return 0; }
866 virtual test15_B *foo3() { return 0; }
867 int i;
868};
869
870struct test15_NV1 {
871 virtual void fooNV1() { }
872 int i;
873};
874
875struct test15_B2 : test15_NV1, virtual test15_B {
876 virtual test15_B2 *foo1() { return 0; }
877 virtual test15_B2 *foo2() { return 0; }
878 int i;
879};
880
881struct test15_D : test15_NV1, virtual test15_B2 {
882 virtual test15_D *foo1() { return 0; }
883};
884
885// CHECK-LP64:__ZTV8test15_D:
886// CHECK-LP64-NEXT: .quad 32
887// CHECK-LP64-NEXT: .quad 16
888// CHECK-LP64-NEXT: .space 8
889// CHECK-LP64-NEXT: .quad __ZTI8test15_D
890// CHECK-LP64-NEXT: .quad __ZN10test15_NV16fooNV1Ev
891// CHECK-LP64-NEXT: .quad __ZN8test15_D4foo1Ev
892// CHECK-LP64-NEXT: .space 8
893// CHECK-LP64-NEXT: .quad 18446744073709551600
894// CHECK-LP64-NEXT: .space 8
895// CHECK-LP64-NEXT: .quad 16
896// CHECK-LP64-NEXT: .quad 18446744073709551600
897// CHECK-LP64-NEXT: .quad __ZTI8test15_D
898// CHECK-LP64-NEXT: .quad __ZN10test15_NV16fooNV1Ev
899// CHECK-LP64-NEXT: .quad __ZTcv0_n40_v0_n24_N8test15_D4foo1Ev
900// CHECK-LP64-NEXT: .quad __ZN9test15_B24foo2Ev
901// CHECK-LP64-NEXT: .space 8
902// CHECK-LP64-NEXT: .quad 18446744073709551600
903// CHECK-LP64-NEXT: .quad 18446744073709551584
904// CHECK-LP64-NEXT: .quad 18446744073709551584
905// CHECK-LP64-NEXT: .quad __ZTI8test15_D
906// CHECK-LP64-NEXT: .quad __ZTcv0_n24_v0_n32_N8test15_D4foo1Ev
907// CHECK-LP64-NEXT: .quad __ZTcv0_n32_v0_n24_N9test15_B24foo2Ev
908// CHECK-LP64-NEXT: .quad __ZN8test15_B4foo3Ev
909
910// CHECK-LP32:__ZTV8test15_D:
911// CHECK-LP32-NEXT: .long 20
912// CHECK-LP32-NEXT: .long 8
913// CHECK-LP32-NEXT: .space 4
914// CHECK-LP32-NEXT: .long __ZTI8test15_D
915// CHECK-LP32-NEXT: .long __ZN10test15_NV16fooNV1Ev
916// CHECK-LP32-NEXT: .long __ZN8test15_D4foo1Ev
917// CHECK-LP32-NEXT: .space 4
918// CHECK-LP32-NEXT: .long 4294967288
919// CHECK-LP32-NEXT: .space 4
920// CHECK-LP32-NEXT: .long 12
921// CHECK-LP32-NEXT: .long 4294967288
922// CHECK-LP32-NEXT: .long __ZTI8test15_D
923// CHECK-LP32-NEXT: .long __ZN10test15_NV16fooNV1Ev
924// CHECK-LP32-NEXT: .long __ZTcv0_n20_v0_n12_N8test15_D4foo1Ev
925// CHECK-LP32-NEXT: .long __ZN9test15_B24foo2Ev
926// CHECK-LP32-NEXT: .space 4
927// CHECK-LP32-NEXT: .long 4294967284
928// CHECK-LP32-NEXT: .long 4294967276
929// CHECK-LP32-NEXT: .long 4294967276
930// CHECK-LP32-NEXT: .long __ZTI8test15_D
931// CHECK-LP32-NEXT: .long __ZTcv0_n12_v0_n16_N8test15_D4foo1Ev
932// CHECK-LP32-NEXT: .long __ZTcv0_n16_v0_n12_N9test15_B24foo2Ev
933// CHECK-LP32-NEXT: .long __ZN8test15_B4foo3Ev
934
935
Mike Stump54150d92009-10-14 18:38:01 +0000936struct test16_NV1 {
937 virtual void fooNV1() { }
938virtual void foo_NV1() { }
939 int i;
940};
941
942struct test16_NV2 {
943 virtual test16_NV2* foo1() { return 0; }
944virtual void foo_NV2() { }
945virtual void foo_NV2b() { }
946 int i;
947};
948
949struct test16_B : public test16_NV1, test16_NV2 {
950 virtual test16_B *foo1() { return 0; }
951 virtual test16_B *foo2() { return 0; }
952 virtual test16_B *foo3() { return 0; }
953virtual void foo_B() { }
954 int i;
955};
956
957struct test16_B2 : test16_NV1, virtual test16_B {
958 virtual test16_B2 *foo1() { return 0; }
959 virtual test16_B2 *foo2() { return 0; }
960virtual void foo_B2() { }
961 int i;
962};
963
964struct test16_D : test16_NV1, virtual test16_B2 {
Mike Stump941e3f32009-11-05 05:01:19 +0000965 virtual void bar();
966 virtual test16_D *foo1();
Mike Stump54150d92009-10-14 18:38:01 +0000967};
968
Mike Stump941e3f32009-11-05 05:01:19 +0000969void test16_D::bar() { }
970
Mike Stump54150d92009-10-14 18:38:01 +0000971// CHECK-LP64: __ZTV8test16_D:
972// CHECK-LP64-NEXT: .quad 32
973// CHECK-LP64-NEXT: .quad 16
974// CHECK-LP64-NEXT: .space 8
975// CHECK-LP64-NEXT: .quad __ZTI8test16_D
976// CHECK-LP64-NEXT: .quad __ZN10test16_NV16fooNV1Ev
977// CHECK-LP64-NEXT: .quad __ZN10test16_NV17foo_NV1Ev
Mike Stump941e3f32009-11-05 05:01:19 +0000978// CHECK-LP64-NEXT: .quad __ZN8test16_D3barEv
Mike Stump54150d92009-10-14 18:38:01 +0000979// CHECK-LP64-NEXT: .quad __ZN8test16_D4foo1Ev
980// CHECK-LP64-NEXT: .space 8
981// CHECK-LP64-NEXT: .space 8
982// CHECK-LP64-NEXT: .quad 18446744073709551600
983// CHECK-LP64-NEXT: .space 8
984// CHECK-LP64-NEXT: .space 8
985// CHECK-LP64-NEXT: .quad 16
986// CHECK-LP64-NEXT: .quad 18446744073709551600
987// CHECK-LP64-NEXT: .quad __ZTI8test16_D
988// CHECK-LP64-NEXT: .quad __ZN10test16_NV16fooNV1Ev
989// CHECK-LP64-NEXT: .quad __ZN10test16_NV17foo_NV1Ev
990// CHECK-LP64-NEXT: .quad __ZTcv0_n48_v0_n24_N8test16_D4foo1Ev
991// CHECK-LP64-NEXT: .quad __ZN9test16_B24foo2Ev
992// CHECK-LP64-NEXT: .quad __ZN9test16_B26foo_B2Ev
993// CHECK-LP64-NEXT .quad 16
994// CHECK-LP64-NEXT .quad 16
995// CHECK-LP64-NEXT: .space 8
996// CHECK-LP64-NEXT: .space 8
997// CHECK-LP64: .quad 18446744073709551600
998// CHECK-LP64: .quad 18446744073709551584
999// CHECK-LP64-NEXT: .space 8
1000// CHECK-LP64-NEXT: .space 8
1001// CHECK-LP64-NEXT: .quad 18446744073709551584
1002// CHECK-LP64-NEXT: .quad __ZTI8test16_D
1003// CHECK-LP64-NEXT: .quad __ZN10test16_NV16fooNV1Ev
1004// CHECK-LP64-NEXT: .quad __ZN10test16_NV17foo_NV1Ev
1005// CHECK-LP64-NEXT: .quad __ZTcv0_n40_v0_n32_N8test16_D4foo1Ev
1006// CHECK-LP64-NEXT: .quad __ZTcv0_n48_v0_n24_N9test16_B24foo2Ev
1007// CHECK-LP64-NEXT: .quad __ZN8test16_B4foo3Ev
1008// CHECK-LP64-NEXT: .quad __ZN8test16_B5foo_BEv
1009// CHECK-LP64-NEXT: .quad 18446744073709551568
1010// CHECK-LP64-NEXT: .quad __ZTI8test16_D
1011// CHECK-LP64-NEXT .quad __ZTcvn16_n40_v16_n32_N8test16_D4foo1Ev
1012// CHECK-LP64: .quad __ZN10test16_NV27foo_NV2Ev
1013// CHECK-LP64-NEXT: .quad __ZN10test16_NV28foo_NV2bEv
1014
1015// CHECK-LP32: __ZTV8test16_D:
1016// CHECK-LP32-NEXT: .long 20
1017// CHECK-LP32-NEXT: .long 8
1018// CHECK-LP32-NEXT: .space 4
1019// CHECK-LP32-NEXT: .long __ZTI8test16_D
1020// CHECK-LP32-NEXT: .long __ZN10test16_NV16fooNV1Ev
1021// CHECK-LP32-NEXT: .long __ZN10test16_NV17foo_NV1Ev
Mike Stump941e3f32009-11-05 05:01:19 +00001022// CHECK-LP32-NEXT: .long __ZN8test16_D3barEv
Mike Stump54150d92009-10-14 18:38:01 +00001023// CHECK-LP32-NEXT: .long __ZN8test16_D4foo1Ev
1024// CHECK-LP32-NEXT: .space 4
1025// CHECK-LP32-NEXT: .space 4
1026// CHECK-LP32-NEXT: .long 4294967288
1027// CHECK-LP32-NEXT: .space 4
1028// CHECK-LP32-NEXT: .space 4
1029// CHECK-LP32-NEXT: .long 12
1030// CHECK-LP32-NEXT: .long 4294967288
1031// CHECK-LP32-NEXT: .long __ZTI8test16_D
1032// CHECK-LP32-NEXT: .long __ZN10test16_NV16fooNV1Ev
1033// CHECK-LP32-NEXT: .long __ZN10test16_NV17foo_NV1Ev
1034// CHECK-LP32-NEXT: .long __ZTcv0_n24_v0_n12_N8test16_D4foo1Ev
1035// CHECK-LP32-NEXT: .long __ZN9test16_B24foo2Ev
1036// CHECK-LP32-NEXT: .long __ZN9test16_B26foo_B2Ev
1037// CHECK-LP32-NEXT .long 8
1038// CHECK-LP32-NEXT .long 8
1039// CHECK-LP32-NEXT: .space 4
1040// CHECK-LP32-NEXT: .space 4
1041// CHECK-LP32: .long 4294967284
1042// CHECK-LP32-NEXT: .long 4294967276
1043// CHECK-LP32-NEXT: .space 4
1044// CHECK-LP32-NEXT: .space 4
1045// CHECK-LP32-NEXT: .long 4294967276
1046// CHECK-LP32-NEXT: .long __ZTI8test16_D
1047// CHECK-LP32-NEXT: .long __ZN10test16_NV16fooNV1Ev
1048// CHECK-LP32-NEXT: .long __ZN10test16_NV17foo_NV1Ev
1049// CHECK-LP32-NEXT: .long __ZTcv0_n20_v0_n16_N8test16_D4foo1Ev
1050// CHECK-LP32-NEXT: .long __ZTcv0_n24_v0_n12_N9test16_B24foo2Ev
1051// CHECK-LP32-NEXT: .long __ZN8test16_B4foo3Ev
1052// CHECK-LP32-NEXT: .long __ZN8test16_B5foo_BEv
1053// CHECK-LP32-NEXT: .long 4294967268
1054// CHECK-LP32-NEXT: .long __ZTI8test16_D
1055// CHECK-LP32-NEXT .long __ZTcvn8_n20_v8_n16_N8test16_D4foo1Ev
1056// CHECK-LP32: .long __ZN10test16_NV27foo_NV2Ev
1057// CHECK-LP32-NEXT: .long __ZN10test16_NV28foo_NV2bEv
1058
Mike Stumpd9878a12009-10-13 10:55:21 +00001059
Mike Stump941e3f32009-11-05 05:01:19 +00001060// FIXME: This is the wrong thunk, but until these issues are fixed, better
1061// than nothing.
1062// CHECK-LPOPT64: __ZTcvn16_n72_v16_n32_N8test16_D4foo1Ev:
1063// CHECK-LPOPT64-NEXT:Leh_func_begin
1064// CHECK-LPOPT64-NEXT: subq $8, %rsp
1065// CHECK-LPOPT64-NEXT:Llabel
1066// CHECK-LPOPT64-NEXT: movq -16(%rdi), %rax
1067// CHECK-LPOPT64-NEXT: movq -72(%rax), %rax
1068// CHECK-LPOPT64-NEXT: leaq -16(%rax,%rdi), %rdi
1069// FIXME: We want a tail call here
1070// CHECK-LPOPT64-NEXT: call __ZTch0_v16_n32_N8test16_D4foo1Ev
1071// CHECK-LPOPT64-NEXT: addq $8, %rsp
1072// CHECK-LPOPT64-NEXT: ret
1073
1074// CHECK-LPOPT64: __ZTch0_v16_n32_N8test16_D4foo1Ev:
1075// CHECK-LPOPT64-NEXT:Leh_func_begin
1076// CHECK-LPOPT64-NEXT: subq $8, %rsp
1077// CHECK-LPOPT64-NEXT:Llabel
1078// CHECK-LPOPT64-NEXT: call __ZN8test16_D4foo1Ev
1079// FIXME: We need a == 0 check here
1080// CHECK-LPOPT64-NEXT: movq 16(%rax), %rcx
1081// CHECK-LPOPT64-NEXT: movq -32(%rcx), %rcx
1082// CHECK-LPOPT64-NEXT: leaq 16(%rcx,%rax), %rax
1083// CHECK-LPOPT64-NEXT: addq $8, %rsp
1084// CHECK-LPOPT64-NEXT: ret
1085
1086
Mike Stump7809e0d2009-10-28 00:35:46 +00001087class test17_B1 {
1088 virtual void foo() = 0;
1089 virtual void bar() { }
1090};
1091
1092class test17_B2 : public test17_B1 {
1093 void foo() { }
1094 virtual void bar() = 0;
1095};
1096
1097class test17_D : public test17_B2 {
1098 void bar() { }
Mike Stump62db2452009-11-03 19:28:52 +00001099};
Mike Stump7809e0d2009-10-28 00:35:46 +00001100
1101
1102// CHECK-LP64:__ZTV8test17_D:
1103// CHECK-LP64-NEXT: .space 8
1104// CHECK-LP64-NEXT: .quad __ZTI8test17_D
1105// CHECK-LP64-NEXT: .quad __ZN9test17_B23fooEv
1106// CHECK-LP64-NEXT: .quad __ZN8test17_D3barEv
1107
1108// CHECK-LP64:__ZTV9test17_B2:
1109// CHECK-LP64-NEXT: .space 8
1110// CHECK-LP64-NEXT: .quad __ZTI9test17_B2
1111// CHECK-LP64-NEXT: .quad __ZN9test17_B23fooEv
1112// CHECK-LP64-NEXT: .quad ___cxa_pure_virtual
1113
1114// CHECK-LP64:__ZTV9test17_B1:
1115// CHECK-LP64-NEXT: .space 8
1116// CHECK-LP64-NEXT: .quad __ZTI9test17_B1
1117// CHECK-LP64-NEXT: .quad ___cxa_pure_virtual
1118// CHECK-LP64-NEXT: .quad __ZN9test17_B13barEv
1119
1120
Mike Stump9c212892009-11-03 19:03:17 +00001121struct test18_NV1 {
1122 virtual void fooNV1() { }
1123virtual void foo_NV1() { }
1124 int i;
1125};
1126
1127struct test18_NV2 {
1128 virtual test18_NV2& foo1() { return *this; }
1129virtual void foo_NV2() { }
1130virtual void foo_NV2b() { }
1131 int i;
1132};
1133
1134struct test18_B : public test18_NV1, test18_NV2 {
1135 virtual test18_B& foo1() { return *this; }
1136 virtual test18_B *foo2() { return 0; }
1137 virtual test18_B *foo3() { return 0; }
1138virtual void foo_B() { }
1139 int i;
1140};
1141
1142struct test18_B2 : test18_NV1, virtual test18_B {
1143 virtual test18_B2& foo1() { return *this; }
1144 virtual test18_B2 *foo2() { return 0; }
1145virtual void foo_B2() { }
1146 int i;
1147};
1148
1149struct test18_D : test18_NV1, virtual test18_B2 {
1150 virtual test18_D& foo1() { return *this; }
Mike Stump62db2452009-11-03 19:28:52 +00001151};
1152
1153
1154struct test19_VB1 { };
1155struct test19_B1 : public virtual test19_VB1 {
1156 virtual void fB1() { }
1157 virtual void foB1B2() { }
1158 virtual void foB1B3() { }
1159 virtual void foB1B4() { }
1160};
1161
1162struct test19_VB2 { };
1163struct test19_B2: public test19_B1, public virtual test19_VB2 {
1164 virtual void foB1B2() { }
1165 virtual void foB1B3() { }
1166 virtual void foB1B4() { }
1167
1168 virtual void fB2() { }
1169 virtual void foB2B3() { }
1170 virtual void foB2B4() { }
1171};
1172
1173struct test19_VB3 { };
1174struct test19_B3: virtual public test19_B2, public virtual test19_VB3 {
1175 virtual void foB1B3() { }
1176 virtual void foB1B4() { }
1177
1178 virtual void foB2B3() { }
1179 virtual void foB2B4() { }
1180
1181 virtual void fB3() { }
1182 virtual void foB3B4() { }
1183};
1184
1185struct test19_VB4 { };
1186struct test19_B4: public test19_B3, public virtual test19_VB4 {
1187 virtual void foB1B4() { }
1188
1189 virtual void foB2B4() { }
1190
1191 virtual void foB3B4() { }
1192
1193 virtual void fB4() { }
1194};
1195
1196struct test19_D : virtual test19_B4 {
1197};
1198
1199
1200// CHECK-LP64: __ZTV8test19_D:
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: .space 8
1214// CHECK-LP64-NEXT: .space 8
1215// CHECK-LP64-NEXT: .space 8
1216// CHECK-LP64-NEXT: .space 8
1217// CHECK-LP64-NEXT: .space 8
1218// CHECK-LP64-NEXT: .quad __ZTI8test19_D
1219// CHECK-LP64-NEXT .quad __ZN9test19_B13fB1Ev
1220// CHECK-LP64-NEXT .quad __ZN9test19_B26foB1B2Ev
1221// CHECK-LP64-NEXT .quad __ZN9test19_B36foB1B3Ev
1222// CHECK-LP64-NEXT .quad __ZN9test19_B46foB1B4Ev
1223// CHECK-LP64-NEXT .quad __ZN9test19_B23fB2Ev
1224// CHECK-LP64-NEXT .quad __ZN9test19_B36foB2B3Ev
1225// CHECK-LP64-NEXT .quad __ZN9test19_B46foB2B4Ev
1226// CHECK-LP64-NEXT .quad __ZN9test19_B33fB3Ev
1227// CHECK-LP64-NEXT .quad __ZN9test19_B46foB3B4Ev
1228// CHECK-LP64-NEXT .quad __ZN9test19_B43fB4Ev
1229
Mike Stump9c212892009-11-03 19:03:17 +00001230
Mike Stump99faefd2009-11-05 05:26:28 +00001231class test20_V {
1232 virtual void foo1();
1233};
1234class test20_V1 {
1235 virtual void foo2();
1236};
1237class test20_B : virtual test20_V {
1238} b;
1239class test20_B1 : virtual test20_V1 {
1240};
1241class test20_D : public test20_B, public test20_B1 {
1242} d;
1243
1244// CHECK-LP64: __ZTV8test20_D:
1245// CHECK-LP64-NEXT: .quad 8
1246// CHECK-LP64-NEXT: .space 8
1247// CHECK-LP64-NEXT: .space 8
1248// CHECK-LP64-NEXT: .space 8
1249// CHECK-LP64-NEXT: .quad __ZTI8test20_D
1250// CHECK-LP64-NEXT: .quad __ZN8test20_V4foo1Ev
1251// CHECK-LP64-NEXT: .space 8
1252// CHECK-LP64-NEXT: .space 8
1253// CHECK-LP64-NEXT: .quad 18446744073709551608
1254// CHECK-LP64-NEXT: .quad __ZTI8test20_D
1255// CHECK-LP64-NEXT: .quad __ZN9test20_V14foo2Ev
1256
1257
Mike Stump7809e0d2009-10-28 00:35:46 +00001258
Mike Stump26899b02009-08-05 22:48:36 +00001259// CHECK-LP64: __ZTV1B:
Mike Stumpb46c92d2009-08-19 02:06:38 +00001260// CHECK-LP64-NEXT: .space 8
1261// CHECK-LP64-NEXT: .quad __ZTI1B
Mike Stump4ec04c42009-08-16 02:40:14 +00001262// CHECK-LP64-NEXT: .quad __ZN1B4bar1Ev
1263// CHECK-LP64-NEXT: .quad __ZN1B4bar2Ev
Mike Stump26899b02009-08-05 22:48:36 +00001264
1265// CHECK-LP32: __ZTV1B:
Mike Stumpb46c92d2009-08-19 02:06:38 +00001266// CHECK-LP32-NEXT: .space 4
1267// CHECK-LP32-NEXT: .long __ZTI1B
Mike Stump4ec04c42009-08-16 02:40:14 +00001268// CHECK-LP32-NEXT: .long __ZN1B4bar1Ev
1269// CHECK-LP32-NEXT: .long __ZN1B4bar2Ev
Mike Stump26899b02009-08-05 22:48:36 +00001270
Mike Stump06758d02009-08-04 20:37:29 +00001271// CHECK-LP64: __ZTV1A:
Mike Stump4ec04c42009-08-16 02:40:14 +00001272// CHECK-LP64-NEXT: .space 8
Mike Stumpb46c92d2009-08-19 02:06:38 +00001273// CHECK-LP64-NEXT: .quad __ZTI1A
Mike Stump4ec04c42009-08-16 02:40:14 +00001274// CHECK-LP64-NEXT: .quad __ZN1B4bar1Ev
1275// CHECK-LP64-NEXT: .quad __ZN1B4bar2Ev
1276// CHECK-LP64-NEXT: .quad __ZN1A4foo1Ev
1277// CHECK-LP64-NEXT: .quad __ZN1A4foo2Ev
Mike Stumpb46c92d2009-08-19 02:06:38 +00001278// CHECK-LP64-NEXT: .quad 18446744073709551600
Mike Stump4ec04c42009-08-16 02:40:14 +00001279// CHECK-LP64-NEXT: .quad __ZTI1A
1280// CHECK-LP64-NEXT: .quad __ZN1C4bee1Ev
1281// CHECK-LP64-NEXT: .quad __ZN1C4bee2Ev
Mike Stump06758d02009-08-04 20:37:29 +00001282
1283// CHECK-LP32: __ZTV1A:
Mike Stump4ec04c42009-08-16 02:40:14 +00001284// CHECK-LP32-NEXT: .space 4
Mike Stumpb46c92d2009-08-19 02:06:38 +00001285// CHECK-LP32-NEXT: .long __ZTI1A
Mike Stump4ec04c42009-08-16 02:40:14 +00001286// CHECK-LP32-NEXT: .long __ZN1B4bar1Ev
1287// CHECK-LP32-NEXT: .long __ZN1B4bar2Ev
1288// CHECK-LP32-NEXT: .long __ZN1A4foo1Ev
1289// CHECK-LP32-NEXT: .long __ZN1A4foo2Ev
Mike Stumpb46c92d2009-08-19 02:06:38 +00001290// CHECK-LP32-NEXT: .long 4294967284
Mike Stump4ec04c42009-08-16 02:40:14 +00001291// CHECK-LP32-NEXT: .long __ZTI1A
1292// CHECK-LP32-NEXT: .long __ZN1C4bee1Ev
1293// CHECK-LP32-NEXT: .long __ZN1C4bee2Ev
Mike Stump8a12b562009-08-06 15:50:11 +00001294
Mike Stump928f1502009-08-07 19:00:50 +00001295// CHECK-LP32:__ZTV1F:
Mike Stump4ec04c42009-08-16 02:40:14 +00001296// CHECK-LP32-NEXT: .space 4
1297// CHECK-LP32-NEXT: .long 8
1298// CHECK-LP32-NEXT: .space 4
1299// CHECK-LP32-NEXT: .space 4
Mike Stumpb46c92d2009-08-19 02:06:38 +00001300// CHECK-LP32-NEXT: .long __ZTI1F
Mike Stump4ec04c42009-08-16 02:40:14 +00001301// CHECK-LP32-NEXT: .long __ZN1D3booEv
1302// CHECK-LP32-NEXT: .long __ZN1F3fooEv
1303// CHECK-LP32-NEXT: .space 4
1304// CHECK-LP32-NEXT: .space 4
1305// CHECK-LP32-NEXT: .space 4
1306// CHECK-LP32-NEXT: .space 4
1307// CHECK-LP32-NEXT: .space 4
1308// CHECK-LP32-NEXT: .long 4294967288
1309// CHECK-LP32-NEXT: .long __ZTI1F
1310// CHECK-LP32-NEXT: .long __ZN2D13barEv
1311// CHECK-LP32-NEXT: .long __ZN2D14bar2Ev
1312// CHECK-LP32-NEXT: .long __ZN2D14bar3Ev
1313// CHECK-LP32-NEXT: .long __ZN2D14bar4Ev
1314// CHECK-LP32-NEXT: .long __ZN2D14bar5Ev
Mike Stump8a12b562009-08-06 15:50:11 +00001315
1316// CHECK-LP64: __ZTV1F:
Mike Stump4ec04c42009-08-16 02:40:14 +00001317// CHECK-LP64-NEXT: .space 8
1318// CHECK-LP64-NEXT: .quad 16
1319// CHECK-LP64-NEXT: .space 8
1320// CHECK-LP64-NEXT: .space 8
Mike Stumpb46c92d2009-08-19 02:06:38 +00001321// CHECK-LP64-NEXT: .quad __ZTI1F
Mike Stump4ec04c42009-08-16 02:40:14 +00001322// CHECK-LP64-NEXT: .quad __ZN1D3booEv
1323// CHECK-LP64-NEXT: .quad __ZN1F3fooEv
1324// CHECK-LP64-NEXT: .space 8
1325// CHECK-LP64-NEXT: .space 8
1326// CHECK-LP64-NEXT: .space 8
1327// CHECK-LP64-NEXT: .space 8
1328// CHECK-LP64-NEXT: .space 8
1329// CHECK-LP64-NEXT: .quad 18446744073709551600
1330// CHECK-LP64-NEXT: .quad __ZTI1F
1331// CHECK-LP64-NEXT: .quad __ZN2D13barEv
1332// CHECK-LP64-NEXT: .quad __ZN2D14bar2Ev
1333// CHECK-LP64-NEXT: .quad __ZN2D14bar3Ev
1334// CHECK-LP64-NEXT: .quad __ZN2D14bar4Ev
1335// CHECK-LP64-NEXT: .quad __ZN2D14bar5Ev
Mike Stump49520942009-08-11 04:03:59 +00001336
Mike Stump62db2452009-11-03 19:28:52 +00001337test19_D d19;
1338test18_D d18;
1339test17_D d17;
Mike Stump54150d92009-10-14 18:38:01 +00001340test16_D d16;
Mike Stumpd9878a12009-10-13 10:55:21 +00001341test15_D d15;
1342test13_D d13;
Mike Stumpb9871a22009-08-21 01:45:00 +00001343test11_D d11;
Mike Stumpb9837442009-08-20 07:22:17 +00001344test10_D d10;
Mike Stump09765ec2009-08-19 02:53:08 +00001345test9_D d9;
1346test8_D d8;
1347
Mike Stumpd76264e2009-08-12 21:50:08 +00001348test5_D d5;
Mike Stump34fae9c2009-08-12 18:50:26 +00001349test4_D d4;
1350test3_D d3;
Mike Stump78846782009-08-13 23:33:29 +00001351
1352test6_D d6;
1353test7_D d7;