blob: 5ff440fb9b13332ff7e3a73444498d327e667ff4 [file] [log] [blame]
Warren Huntaf41fcc2013-10-30 00:08:34 +00001// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -cxx-abi microsoft %s 2>/dev/null \
Warren Huntbd1b0c62013-10-14 19:08:58 +00002// RUN: | FileCheck %s
Warren Huntaf41fcc2013-10-30 00:08:34 +00003// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts -cxx-abi microsoft %s 2>/dev/null \
Warren Hunt55d8e822013-10-23 23:53:07 +00004// RUN: | FileCheck %s -check-prefix CHECK-X64
Warren Huntbd1b0c62013-10-14 19:08:58 +00005
6extern "C" int printf(const char *fmt, ...);
7
8struct B0 { char a; B0() : a(0xB0) {} };
9struct __declspec(align(1)) B1 {};
10
Warren Huntaf41fcc2013-10-30 00:08:34 +000011struct A : virtual B0 {} b;
Warren Huntbd1b0c62013-10-14 19:08:58 +000012
13// CHECK: *** Dumping AST Record Layout
14// CHECK: 0 | struct A
15// CHECK: 0 | (A vbtable pointer)
16// CHECK: 4 | struct B0 (virtual base)
17// CHECK: 4 | char a
18// CHECK: | [sizeof=5, align=4
19// CHECK: | nvsize=4, nvalign=4]
Warren Hunt55d8e822013-10-23 23:53:07 +000020// CHECK-X64: *** Dumping AST Record Layout
21// CHECK-X64: 0 | struct A
22// CHECK-X64: 0 | (A vbtable pointer)
23// CHECK-X64: 8 | struct B0 (virtual base)
24// CHECK-X64: 8 | char a
25// CHECK-X64: | [sizeof=16, align=8
26// CHECK-X64: | nvsize=8, nvalign=8]
Warren Huntbd1b0c62013-10-14 19:08:58 +000027
28struct __declspec(align(1)) B : virtual B0 {};
29
30// CHECK: *** Dumping AST Record Layout
31// CHECK: 0 | struct B
32// CHECK: 0 | (B vbtable pointer)
33// CHECK: 4 | struct B0 (virtual base)
34// CHECK: 4 | char a
35// CHECK: | [sizeof=8, align=4
36// CHECK: | nvsize=4, nvalign=4]
Warren Hunt55d8e822013-10-23 23:53:07 +000037// CHECK-X64: *** Dumping AST Record Layout
38// CHECK-X64: 0 | struct B
39// CHECK-X64: 0 | (B vbtable pointer)
40// CHECK-X64: 8 | struct B0 (virtual base)
41// CHECK-X64: 8 | char a
42// CHECK-X64: | [sizeof=16, align=8
43// CHECK-X64: | nvsize=8, nvalign=8]
Warren Huntbd1b0c62013-10-14 19:08:58 +000044
45struct C : virtual B0 { int a; C() : a(0xC) {} };
46
47// CHECK: *** Dumping AST Record Layout
48// CHECK: 0 | struct C
49// CHECK: 0 | (C vbtable pointer)
50// CHECK: 4 | int a
51// CHECK: 8 | struct B0 (virtual base)
52// CHECK: 8 | char a
53// CHECK: | [sizeof=9, align=4
54// CHECK: | nvsize=8, nvalign=4]
Warren Hunt55d8e822013-10-23 23:53:07 +000055// CHECK-X64: *** Dumping AST Record Layout
56// CHECK-X64: 0 | struct C
57// CHECK-X64: 0 | (C vbtable pointer)
58// CHECK-X64: 8 | int a
59// CHECK-X64: 16 | struct B0 (virtual base)
60// CHECK-X64: 16 | char a
61// CHECK-X64: | [sizeof=24, align=8
62// CHECK-X64: | nvsize=16, nvalign=8]
Warren Huntbd1b0c62013-10-14 19:08:58 +000063
64struct D : virtual B0 { __declspec(align(1)) int a; D() : a(0xD) {} };
65
66// CHECK: *** Dumping AST Record Layout
67// CHECK: 0 | struct D
68// CHECK: 0 | (D vbtable pointer)
69// CHECK: 4 | int a
70// CHECK: 8 | struct B0 (virtual base)
71// CHECK: 8 | char a
72// CHECK: | [sizeof=12, align=4
73// CHECK: | nvsize=8, nvalign=4]
Warren Hunt55d8e822013-10-23 23:53:07 +000074// CHECK-X64: *** Dumping AST Record Layout
75// CHECK-X64: 0 | struct D
76// CHECK-X64: 0 | (D vbtable pointer)
77// CHECK-X64: 8 | int a
78// CHECK-X64: 16 | struct B0 (virtual base)
79// CHECK-X64: 16 | char a
80// CHECK-X64: | [sizeof=24, align=8
81// CHECK-X64: | nvsize=16, nvalign=8]
Warren Huntbd1b0c62013-10-14 19:08:58 +000082
83struct E : virtual B0, virtual B1 {};
84
85// CHECK: *** Dumping AST Record Layout
86// CHECK: 0 | struct E
87// CHECK: 0 | (E vbtable pointer)
88// CHECK: 4 | struct B0 (virtual base)
89// CHECK: 4 | char a
90// CHECK: 5 | struct B1 (virtual base) (empty)
91// CHECK: | [sizeof=8, align=4
92// CHECK: | nvsize=4, nvalign=4]
Warren Hunt55d8e822013-10-23 23:53:07 +000093// CHECK-X64: *** Dumping AST Record Layout
94// CHECK-X64: 0 | struct E
95// CHECK-X64: 0 | (E vbtable pointer)
96// CHECK-X64: 8 | struct B0 (virtual base)
97// CHECK-X64: 8 | char a
98// CHECK-X64: 9 | struct B1 (virtual base) (empty)
99// CHECK-X64: | [sizeof=16, align=8
100// CHECK-X64: | nvsize=8, nvalign=8]
Reid Klecknerbd5bd4b2013-10-14 21:14:05 +0000101
102struct F { char a; virtual ~F(); };
103
104// CHECK: *** Dumping AST Record Layout
105// CHECK: 0 | struct F
106// CHECK: 0 | (F vftable pointer)
107// CHECK: 4 | char a
108// CHECK: | [sizeof=8, align=4
109// CHECK: | nvsize=8, nvalign=4]
Warren Hunt55d8e822013-10-23 23:53:07 +0000110// CHECK-X64: *** Dumping AST Record Layout
111// CHECK-X64: 0 | struct F
112// CHECK-X64: 0 | (F vftable pointer)
113// CHECK-X64: 8 | char a
114// CHECK-X64: | [sizeof=16, align=8
115// CHECK-X64: | nvsize=16, nvalign=8]
Reid Klecknerbd5bd4b2013-10-14 21:14:05 +0000116
Warren Huntbd1b0c62013-10-14 19:08:58 +0000117int a[
118sizeof(A)+
119sizeof(B)+
120sizeof(C)+
121sizeof(D)+
Reid Klecknerbd5bd4b2013-10-14 21:14:05 +0000122sizeof(E)+
123sizeof(F)];