blob: 7efa0b3b16e5d5ac13e252e2f3a8296d69e3d3a6 [file] [log] [blame]
Warren Huntbd1b0c62013-10-14 19:08:58 +00001// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -cxx-abi microsoft -fdump-record-layouts %s 2>/dev/null \
2// RUN: | FileCheck %s
3
4typedef struct A {
5 char x;
6 int a : 22;
7 int : 0;
8 int c : 10;
9 char b : 3;
10 char d: 4;
11 short y;
12} A;
13
14// CHECK: Type: struct A
15// CHECK: Size:128
16// CHECK: Alignment:32
17// CHECK: FieldOffsets: [0, 32, 64, 64, 96, 99, 112]>
18
19typedef struct B {
20 char x;
21 int : 0;
22 short a : 4;
23 char y;
24} B;
25
26// CHECK: Type: struct B
27// CHECK: Size:48
28// CHECK: Alignment:16
29// CHECK: FieldOffsets: [0, 8, 16, 32]>
30
31typedef struct C {
32 char x;
33 short a : 4;
34 int : 0;
35 char y;
36} C;
37
38// CHECK: Type: struct C
39// CHECK: Size:64
40// CHECK: Alignment:32
41// CHECK: FieldOffsets: [0, 16, 32, 32]>
42
43typedef struct D {
44 char x;
45 short : 0;
46 int : 0;
47 char y;
48} D;
49
50// CHECK: Type: struct D
51// CHECK: Size:16
52// CHECK: Alignment:8
53// CHECK: FieldOffsets: [0, 8, 8, 8]>
54
55typedef union E {
56 char x;
57 long long a : 3;
58 int b : 3;
59 long long : 0;
60 short y;
61} E;
62
63// CHECK: Type: union E
64// CHECK: Size:64
65// CHECK: Alignment:16
66// CHECK: FieldOffsets: [0, 0, 0, 0, 0]>
67
68typedef struct F {
69 char x;
70 char a : 3;
71 char b : 3;
72 char c : 3;
73 short d : 6;
74 short e : 6;
75 short f : 6;
76 short g : 11;
77 short h : 11;
78 short i : 11;
79 short y;
80} F;
81
82// CHECK: Type: struct F
83// CHECK: Size:128
84// CHECK: Alignment:16
85// CHECK: FieldOffsets: [0, 8, 11, 16, 32, 38, 48, 64, 80, 96, 112]>
86
87typedef union G {
88 char x;
89 int a : 3;
90 int : 0;
91 long long : 0;
92 short y;
93} G;
94
95// CHECK: Type: union G
96// CHECK: Size:32
97// CHECK: Alignment:16
98// CHECK: FieldOffsets: [0, 0, 0, 0, 0]>
99
100typedef struct H {
101 unsigned short a : 1;
102 unsigned char : 0;
103 unsigned long : 0;
104 unsigned short c : 1;
105} H;
106
107// CHECK: Type: struct H
108// CHECK: Size:32
109// CHECK: Alignment:16
110// CHECK: FieldOffsets: [0, 16, 16, 16]>
111
112#pragma pack(push, 1)
113
114typedef struct A1 {
115 char x;
116 int a : 22;
117 int : 0;
118 int c : 10;
119 char b : 3;
120 char d: 4;
121 short y;
122} A1;
123
124// CHECK: Type: struct A1
125// CHECK: Size:96
126// CHECK: Alignment:8
127// CHECK: FieldOffsets: [0, 8, 40, 40, 72, 75, 80]>
128
129typedef struct B1 {
130 char x;
131 int : 0;
132 short a : 4;
133 char y;
134} B1;
135
136// CHECK: Type: struct B1
137// CHECK: Size:32
138// CHECK: Alignment:8
139// CHECK: FieldOffsets: [0, 8, 8, 24]>
140
141typedef struct C1 {
142 char x;
143 short a : 4;
144 int : 0;
145 char y;
146} C1;
147
148// CHECK: Type: struct C1
149// CHECK: Size:32
150// CHECK: Alignment:8
151// CHECK: FieldOffsets: [0, 8, 24, 24]>
152
153typedef struct D1 {
154 char x;
155 short : 0;
156 int : 0;
157 char y;
158} D1;
159
160// CHECK: Type: struct D1
161// CHECK: Size:16
162// CHECK: Alignment:8
163// CHECK: FieldOffsets: [0, 8, 8, 8]>
164
165typedef union E1 {
166 char x;
167 long long a : 3;
168 int b : 3;
169 long long : 0;
170 short y;
171} E1;
172
173// CHECK: Type: union E1
174// CHECK: Size:64
175// CHECK: Alignment:8
176// CHECK: FieldOffsets: [0, 0, 0, 0, 0]>
177
178typedef struct F1 {
179 char x;
180 char a : 3;
181 char b : 3;
182 char c : 3;
183 short d : 6;
184 short e : 6;
185 short f : 6;
186 short g : 11;
187 short h : 11;
188 short i : 11;
189 short y;
190} F1;
191
192// CHECK: Type: struct F1
193// CHECK: Size:120
194// CHECK: Alignment:8
195// CHECK: FieldOffsets: [0, 8, 11, 16, 24, 30, 40, 56, 72, 88, 104]>
196
197typedef union G1 {
198 char x;
199 int a : 3;
200 int : 0;
201 long long : 0;
202 short y;
203} G1;
204
205// CHECK: Type: union G1
206// CHECK: Size:32
207// CHECK: Alignment:8
208// CHECK: FieldOffsets: [0, 0, 0, 0, 0]>
209
210typedef struct H1 {
211 unsigned long a : 1;
212 unsigned char : 0;
213 unsigned long : 0;
214 unsigned long c : 1;
215} H1;
216
217// CHECK: Type: struct H1
218// CHECK: Size:64
219// CHECK: Alignment:8
220// CHECK: FieldOffsets: [0, 32, 32, 32]>
221
222#pragma pack(pop)
223
224int x[
225sizeof(A ) +
226sizeof(B ) +
227sizeof(C ) +
228sizeof(D ) +
229sizeof(E ) +
230sizeof(F ) +
231sizeof(G ) +
232sizeof(H ) +
233sizeof(A1) +
234sizeof(B1) +
235sizeof(C1) +
236sizeof(D1) +
237sizeof(E1) +
238sizeof(F1) +
239sizeof(G1) +
240sizeof(H1) +
2410];