blob: 7cffa8c8e4ac9fba5eace8f6b1231dd47c8e7a3c [file] [log] [blame]
Hans Wennborgc9bd88e2014-01-14 19:35:09 +00001// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>&1 \
Warren Hunt6b7048d2013-11-06 00:54:59 +00002// RUN: | FileCheck %s
Hans Wennborgc9bd88e2014-01-14 19:35:09 +00003// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
Warren Hunt6b7048d2013-11-06 00:54:59 +00004// RUN: | FileCheck %s -check-prefix CHECK-X64
5
Warren Hunt71140d62013-12-06 20:16:49 +00006struct B0 { int a; };
7struct B1 { int a; };
Warren Hunt6b7048d2013-11-06 00:54:59 +00008
Warren Hunt71140d62013-12-06 20:16:49 +00009struct A : virtual B0 { char a : 1; };
Warren Hunt6b7048d2013-11-06 00:54:59 +000010
11// CHECK: *** Dumping AST Record Layout
Warren Huntd640d7d2014-01-09 00:30:56 +000012// CHECK: *** Dumping AST Record Layout
13// CHECK-NEXT: 0 | struct A
14// CHECK-NEXT: 0 | (A vbtable pointer)
15// CHECK-NEXT: 4 | char a
16// CHECK-NEXT: 12 | struct B0 (virtual base)
17// CHECK-NEXT: 12 | int a
18// CHECK-NEXT: | [sizeof=16, align=4
19// CHECK-NEXT: | nvsize=8, nvalign=4]
Warren Hunt6b7048d2013-11-06 00:54:59 +000020// CHECK-X64: *** Dumping AST Record Layout
Warren Huntd640d7d2014-01-09 00:30:56 +000021// CHECK-X64: *** Dumping AST Record Layout
22// CHECK-X64-NEXT: 0 | struct A
23// CHECK-X64-NEXT: 0 | (A vbtable pointer)
24// CHECK-X64-NEXT: 8 | char a
25// CHECK-X64-NEXT: 20 | struct B0 (virtual base)
26// CHECK-X64-NEXT: 20 | int a
27// CHECK-X64-NEXT: | [sizeof=24, align=8
28// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
Warren Hunt6b7048d2013-11-06 00:54:59 +000029
Warren Hunt71140d62013-12-06 20:16:49 +000030struct B : virtual B0 { short a : 1; };
Warren Hunt6b7048d2013-11-06 00:54:59 +000031
32// CHECK: *** Dumping AST Record Layout
Warren Huntd640d7d2014-01-09 00:30:56 +000033// CHECK-NEXT: 0 | struct B
34// CHECK-NEXT: 0 | (B vbtable pointer)
35// CHECK-NEXT: 4 | short a
36// CHECK-NEXT: 12 | struct B0 (virtual base)
37// CHECK-NEXT: 12 | int a
38// CHECK-NEXT: | [sizeof=16, align=4
39// CHECK-NEXT: | nvsize=8, nvalign=4]
Warren Hunt6b7048d2013-11-06 00:54:59 +000040// CHECK-X64: *** Dumping AST Record Layout
Warren Huntd640d7d2014-01-09 00:30:56 +000041// CHECK-X64-NEXT: 0 | struct B
42// CHECK-X64-NEXT: 0 | (B vbtable pointer)
43// CHECK-X64-NEXT: 8 | short a
44// CHECK-X64-NEXT: 20 | struct B0 (virtual base)
45// CHECK-X64-NEXT: 20 | int a
46// CHECK-X64-NEXT: | [sizeof=24, align=8
47// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
Warren Hunt6b7048d2013-11-06 00:54:59 +000048
Warren Hunt71140d62013-12-06 20:16:49 +000049struct C : virtual B0 { char a : 1; char : 0; };
Warren Hunt6b7048d2013-11-06 00:54:59 +000050
51// CHECK: *** Dumping AST Record Layout
Warren Huntd640d7d2014-01-09 00:30:56 +000052// CHECK-NEXT: 0 | struct C
53// CHECK-NEXT: 0 | (C vbtable pointer)
54// CHECK-NEXT: 4 | char a
55// CHECK-NEXT: 5 | char
56// CHECK-NEXT: 8 | struct B0 (virtual base)
57// CHECK-NEXT: 8 | int a
58// CHECK-NEXT: | [sizeof=12, align=4
59// CHECK-NEXT: | nvsize=8, nvalign=4]
Warren Hunt6b7048d2013-11-06 00:54:59 +000060// CHECK-X64: *** Dumping AST Record Layout
Warren Huntd640d7d2014-01-09 00:30:56 +000061// CHECK-X64-NEXT: 0 | struct C
62// CHECK-X64-NEXT: 0 | (C vbtable pointer)
63// CHECK-X64-NEXT: 8 | char a
64// CHECK-X64-NEXT: 9 | char
65// CHECK-X64-NEXT: 16 | struct B0 (virtual base)
66// CHECK-X64-NEXT: 16 | int a
67// CHECK-X64-NEXT: | [sizeof=24, align=8
68// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
Warren Hunt71140d62013-12-06 20:16:49 +000069
70struct D : virtual B0 { char a : 1; char b; };
71
72// CHECK: *** Dumping AST Record Layout
Warren Huntd640d7d2014-01-09 00:30:56 +000073// CHECK-NEXT: 0 | struct D
74// CHECK-NEXT: 0 | (D vbtable pointer)
75// CHECK-NEXT: 4 | char a
76// CHECK-NEXT: 5 | char b
77// CHECK-NEXT: 8 | struct B0 (virtual base)
78// CHECK-NEXT: 8 | int a
79// CHECK-NEXT: | [sizeof=12, align=4
80// CHECK-NEXT: | nvsize=8, nvalign=4]
Warren Hunt71140d62013-12-06 20:16:49 +000081// CHECK-X64: *** Dumping AST Record Layout
Warren Huntd640d7d2014-01-09 00:30:56 +000082// CHECK-X64-NEXT: 0 | struct D
83// CHECK-X64-NEXT: 0 | (D vbtable pointer)
84// CHECK-X64-NEXT: 8 | char a
85// CHECK-X64-NEXT: 9 | char b
86// CHECK-X64-NEXT: 16 | struct B0 (virtual base)
87// CHECK-X64-NEXT: 16 | int a
88// CHECK-X64-NEXT: | [sizeof=24, align=8
89// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
Warren Hunt71140d62013-12-06 20:16:49 +000090
91struct E : virtual B0, virtual B1 { long long : 1; };
92// CHECK: *** Dumping AST Record Layout
Warren Huntd640d7d2014-01-09 00:30:56 +000093// CHECK: *** Dumping AST Record Layout
94// CHECK-NEXT: 0 | struct E
95// CHECK-NEXT: 0 | (E vbtable pointer)
96// CHECK-NEXT: 8 | long long
97// CHECK-NEXT: 24 | struct B0 (virtual base)
98// CHECK-NEXT: 24 | int a
99// CHECK-NEXT: 36 | struct B1 (virtual base)
100// CHECK-NEXT: 36 | int a
101// CHECK-NEXT: | [sizeof=40, align=8
102// CHECK-NEXT: | nvsize=16, nvalign=8]
Warren Hunt71140d62013-12-06 20:16:49 +0000103// CHECK-X64: *** Dumping AST Record Layout
Warren Huntd640d7d2014-01-09 00:30:56 +0000104// CHECK-X64: *** Dumping AST Record Layout
105// CHECK-X64-NEXT: 0 | struct E
106// CHECK-X64-NEXT: 0 | (E vbtable pointer)
107// CHECK-X64-NEXT: 8 | long long
108// CHECK-X64-NEXT: 24 | struct B0 (virtual base)
109// CHECK-X64-NEXT: 24 | int a
110// CHECK-X64-NEXT: 36 | struct B1 (virtual base)
111// CHECK-X64-NEXT: 36 | int a
112// CHECK-X64-NEXT: | [sizeof=40, align=8
113// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
Warren Hunt6b7048d2013-11-06 00:54:59 +0000114
115int a[
116sizeof(A)+
117sizeof(B)+
118sizeof(C)+
Warren Hunt71140d62013-12-06 20:16:49 +0000119sizeof(D)+
120sizeof(E)];