blob: 4a2076c1dbac485da9097ae897a4d530b3b9c671 [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
Warren Hunt55d8e822013-10-23 23:53:07 +00003// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -cxx-abi microsoft -fdump-record-layouts %s 2>/dev/null \
4// 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
114#pragma pack(push, 1)
115
116typedef struct A1 {
117 char x;
118 int a : 22;
119 int : 0;
120 int c : 10;
121 char b : 3;
122 char d: 4;
123 short y;
124} A1;
125
126// CHECK: Type: struct A1
127// CHECK: Size:96
128// CHECK: Alignment:8
129// CHECK: FieldOffsets: [0, 8, 40, 40, 72, 75, 80]>
130
131typedef struct B1 {
132 char x;
133 int : 0;
134 short a : 4;
135 char y;
136} B1;
137
138// CHECK: Type: struct B1
139// CHECK: Size:32
140// CHECK: Alignment:8
141// CHECK: FieldOffsets: [0, 8, 8, 24]>
142
143typedef struct C1 {
144 char x;
145 short a : 4;
146 int : 0;
147 char y;
148} C1;
149
150// CHECK: Type: struct C1
151// CHECK: Size:32
152// CHECK: Alignment:8
153// CHECK: FieldOffsets: [0, 8, 24, 24]>
154
155typedef struct D1 {
156 char x;
157 short : 0;
158 int : 0;
159 char y;
160} D1;
161
162// CHECK: Type: struct D1
163// CHECK: Size:16
164// CHECK: Alignment:8
165// CHECK: FieldOffsets: [0, 8, 8, 8]>
166
167typedef union E1 {
168 char x;
169 long long a : 3;
170 int b : 3;
171 long long : 0;
172 short y;
173} E1;
174
175// CHECK: Type: union E1
176// CHECK: Size:64
177// CHECK: Alignment:8
178// CHECK: FieldOffsets: [0, 0, 0, 0, 0]>
179
180typedef struct F1 {
181 char x;
182 char a : 3;
183 char b : 3;
184 char c : 3;
185 short d : 6;
186 short e : 6;
187 short f : 6;
188 short g : 11;
189 short h : 11;
190 short i : 11;
191 short y;
192} F1;
193
194// CHECK: Type: struct F1
195// CHECK: Size:120
196// CHECK: Alignment:8
197// CHECK: FieldOffsets: [0, 8, 11, 16, 24, 30, 40, 56, 72, 88, 104]>
198
199typedef union G1 {
200 char x;
201 int a : 3;
202 int : 0;
203 long long : 0;
204 short y;
205} G1;
206
207// CHECK: Type: union G1
208// CHECK: Size:32
209// CHECK: Alignment:8
210// CHECK: FieldOffsets: [0, 0, 0, 0, 0]>
211
212typedef struct H1 {
213 unsigned long a : 1;
214 unsigned char : 0;
215 unsigned long : 0;
216 unsigned long c : 1;
217} H1;
218
219// CHECK: Type: struct H1
220// CHECK: Size:64
221// CHECK: Alignment:8
222// CHECK: FieldOffsets: [0, 32, 32, 32]>
223
224#pragma pack(pop)
225
226int x[
227sizeof(A ) +
228sizeof(B ) +
229sizeof(C ) +
230sizeof(D ) +
231sizeof(E ) +
232sizeof(F ) +
233sizeof(G ) +
234sizeof(H ) +
235sizeof(A1) +
236sizeof(B1) +
237sizeof(C1) +
238sizeof(D1) +
239sizeof(E1) +
240sizeof(F1) +
241sizeof(G1) +
242sizeof(H1) +
2430];