blob: a78fdad7e2ebb4b401209776ff1acbde92576279 [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)
John McCall0d461692015-08-19 22:42:36 +000015// CHECK-NEXT: 4:0-0 | char a
Warren Hunt29a2b952014-04-11 00:14:09 +000016// CHECK-NEXT: 8 | struct B0 (virtual base)
17// CHECK-NEXT: 8 | int a
18// CHECK-NEXT: | [sizeof=12, align=4
Warren Huntd640d7d2014-01-09 00:30:56 +000019// 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)
John McCall0d461692015-08-19 22:42:36 +000024// CHECK-X64-NEXT: 8:0-0 | char a
Warren Hunt29a2b952014-04-11 00:14:09 +000025// CHECK-X64-NEXT: 16 | struct B0 (virtual base)
26// CHECK-X64-NEXT: 16 | int a
Warren Huntd640d7d2014-01-09 00:30:56 +000027// 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)
John McCall0d461692015-08-19 22:42:36 +000035// CHECK-NEXT: 4:0-0 | short a
Warren Hunt29a2b952014-04-11 00:14:09 +000036// CHECK-NEXT: 8 | struct B0 (virtual base)
37// CHECK-NEXT: 8 | int a
38// CHECK-NEXT: | [sizeof=12, align=4
Warren Huntd640d7d2014-01-09 00:30:56 +000039// 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)
John McCall0d461692015-08-19 22:42:36 +000043// CHECK-X64-NEXT: 8:0-0 | short a
Warren Hunt29a2b952014-04-11 00:14:09 +000044// CHECK-X64-NEXT: 16 | struct B0 (virtual base)
45// CHECK-X64-NEXT: 16 | int a
Warren Huntd640d7d2014-01-09 00:30:56 +000046// 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)
John McCall0d461692015-08-19 22:42:36 +000054// CHECK-NEXT: 4:0-0 | char a
55// CHECK-NEXT: 5:- | char
Warren Huntd640d7d2014-01-09 00:30:56 +000056// 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)
John McCall0d461692015-08-19 22:42:36 +000063// CHECK-X64-NEXT: 8:0-0 | char a
64// CHECK-X64-NEXT: 9:- | char
Warren Huntd640d7d2014-01-09 00:30:56 +000065// 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)
John McCall0d461692015-08-19 22:42:36 +000075// CHECK-NEXT: 4:0-0 | char a
Warren Huntd640d7d2014-01-09 00:30:56 +000076// 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)
John McCall0d461692015-08-19 22:42:36 +000084// CHECK-X64-NEXT: 8:0-0 | char a
Warren Huntd640d7d2014-01-09 00:30:56 +000085// 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)
John McCall0d461692015-08-19 22:42:36 +000096// CHECK-NEXT: 8:0-0 | long long
Warren Hunt29a2b952014-04-11 00:14:09 +000097// CHECK-NEXT: 16 | struct B0 (virtual base)
98// CHECK-NEXT: 16 | int a
99// CHECK-NEXT: 20 | struct B1 (virtual base)
100// CHECK-NEXT: 20 | int a
101// CHECK-NEXT: | [sizeof=24, align=8
Warren Huntd640d7d2014-01-09 00:30:56 +0000102// 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)
John McCall0d461692015-08-19 22:42:36 +0000107// CHECK-X64-NEXT: 8:0-0 | long long
Warren Hunt29a2b952014-04-11 00:14:09 +0000108// CHECK-X64-NEXT: 16 | struct B0 (virtual base)
109// CHECK-X64-NEXT: 16 | int a
110// CHECK-X64-NEXT: 20 | struct B1 (virtual base)
111// CHECK-X64-NEXT: 20 | int a
112// CHECK-X64-NEXT: | [sizeof=24, align=8
Warren Huntd640d7d2014-01-09 00:30:56 +0000113// 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)];