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