blob: 55c9b5d923b246d133ddc555e2a41fbd100871ce [file] [log] [blame]
Mike Stump06758d02009-08-04 20:37:29 +00001// RUN: clang-cc -triple x86_64-apple-darwin -frtti=0 -std=c++0x -S %s -o %t-64.s &&
2// RUN: FileCheck -check-prefix LP64 --input-file=%t-64.s %s &&
3// RUN: clang-cc -triple i386-apple-darwin -frtti=0 -std=c++0x -S %s -o %t-32.s &&
4// RUN: FileCheck -check-prefix LP32 -input-file=%t-32.s %s &&
5// RUN: true
Mike Stump3dee6ef2009-07-30 00:22:38 +00006
Mike Stump104ffaa2009-08-04 21:58:42 +00007struct B {
8 virtual void bar1();
9 virtual void bar2();
10};
Mike Stump6f376332009-08-05 22:37:18 +000011void B::bar1() { }
12void B::bar2() { }
13
14struct C {
15 virtual void bee1();
16 virtual void bee2();
17};
18void C::bee1() { }
19void C::bee2() { }
Mike Stump104ffaa2009-08-04 21:58:42 +000020
21static_assert (sizeof (B) == (sizeof(void *)), "vtable pointer layout");
22
Mike Stump6f376332009-08-05 22:37:18 +000023class A : public B, public C {
Mike Stump3dee6ef2009-07-30 00:22:38 +000024public:
Mike Stump06758d02009-08-04 20:37:29 +000025 virtual void foo1();
26 virtual void foo2();
27 A() { }
28} *a;
Mike Stump6f376332009-08-05 22:37:18 +000029void A::foo1() { }
30void A::foo2() { }
Mike Stump3dee6ef2009-07-30 00:22:38 +000031
Mike Stump06758d02009-08-04 20:37:29 +000032int main() {
33 A a;
Mike Stump26899b02009-08-05 22:48:36 +000034 B b;
Mike Stump06758d02009-08-04 20:37:29 +000035}
36
Mike Stump26899b02009-08-05 22:48:36 +000037// CHECK-LP64: __ZTV1B:
38// CHECK-LP64: .space 8
39// CHECK-LP64: .space 8
40// CHECK-LP64: .quad __ZN1B4bar1Ev
41// CHECK-LP64: .quad __ZN1B4bar2Ev
42
43// CHECK-LP32: __ZTV1B:
44// CHECK-LP32: .space 4
45// CHECK-LP32: .space 4
46// CHECK-LP32: .long __ZN1B4bar1Ev
47// CHECK-LP32: .long __ZN1B4bar2Ev
48
Mike Stump06758d02009-08-04 20:37:29 +000049// CHECK-LP64: __ZTV1A:
50// CHECK-LP64: .space 8
51// CHECK-LP64: .space 8
Mike Stump104ffaa2009-08-04 21:58:42 +000052// CHECK-LP64: .quad __ZN1B4bar1Ev
53// CHECK-LP64: .quad __ZN1B4bar2Ev
Mike Stump06758d02009-08-04 20:37:29 +000054// CHECK-LP64: .quad __ZN1A4foo1Ev
55// CHECK-LP64: .quad __ZN1A4foo2Ev
Mike Stump6f376332009-08-05 22:37:18 +000056// CHECK-LP64: .quad 18446744073709551608
57// CHECK-LP64: .space 8
58// CHECK-LP64: .quad __ZN1C4bee1Ev
59// CHECK-LP64: .quad __ZN1C4bee2Ev
Mike Stump06758d02009-08-04 20:37:29 +000060
61// CHECK-LP32: __ZTV1A:
62// CHECK-LP32: .space 4
63// CHECK-LP32: .space 4
Mike Stump104ffaa2009-08-04 21:58:42 +000064// CHECK-LP32: .long __ZN1B4bar1Ev
65// CHECK-LP32: .long __ZN1B4bar2Ev
Mike Stump06758d02009-08-04 20:37:29 +000066// CHECK-LP32: .long __ZN1A4foo1Ev
67// CHECK-LP32: .long __ZN1A4foo2Ev
Mike Stump6f376332009-08-05 22:37:18 +000068// CHECK-LP32: .long 4294967292
69// CHECK-LP32: .space 4
70// CHECK-LP32: .long __ZN1C4bee1Ev
71// CHECK-LP32: .long __ZN1C4bee2Ev