xref: /aosp_15_r20/external/clang/test/Sema/bitfield-layout_1.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=i686-apple-darwin9
2*67e74705SXin Li // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=arm-linux-gnueabihf
3*67e74705SXin Li // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=aarch64-linux-gnu
4*67e74705SXin Li // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=x86_64-pc-linux-gnu
5*67e74705SXin Li // expected-no-diagnostics
6*67e74705SXin Li 
7*67e74705SXin Li #define CHECK_SIZE(name, size) \
8*67e74705SXin Li   extern int name##_1[sizeof(name) == size ? 1 : -1];
9*67e74705SXin Li 
10*67e74705SXin Li 
11*67e74705SXin Li struct  __attribute__((packed)) {
12*67e74705SXin Li   int a;
13*67e74705SXin Li   int b : 4;
14*67e74705SXin Li   int c : 32;
15*67e74705SXin Li } s0;
16*67e74705SXin Li CHECK_SIZE(s0,9)
17*67e74705SXin Li 
18*67e74705SXin Li #pragma pack (1)
19*67e74705SXin Li struct {
20*67e74705SXin Li   int a;
21*67e74705SXin Li   int b : 4;
22*67e74705SXin Li   int c : 32;
23*67e74705SXin Li } s1;
24*67e74705SXin Li CHECK_SIZE(s1,9)
25*67e74705SXin Li 
26*67e74705SXin Li #pragma pack (2)
27*67e74705SXin Li struct {
28*67e74705SXin Li   int a;
29*67e74705SXin Li   int b : 4;
30*67e74705SXin Li   int c : 32;
31*67e74705SXin Li } s2;
32*67e74705SXin Li CHECK_SIZE(s2,10)
33*67e74705SXin Li 
34*67e74705SXin Li #pragma pack (2)
35*67e74705SXin Li struct __attribute__((packed)) {
36*67e74705SXin Li   int a;
37*67e74705SXin Li   int b : 4;
38*67e74705SXin Li   int c : 32;
39*67e74705SXin Li } s3;
40*67e74705SXin Li CHECK_SIZE(s3,10)
41*67e74705SXin Li 
42*67e74705SXin Li #pragma pack (4)
43*67e74705SXin Li struct  __attribute__((packed)) {
44*67e74705SXin Li   int a;
45*67e74705SXin Li   int b : 4;
46*67e74705SXin Li   int c : 32;
47*67e74705SXin Li } s4;
48*67e74705SXin Li CHECK_SIZE(s4,12)
49*67e74705SXin Li 
50*67e74705SXin Li #pragma pack (16)
51*67e74705SXin Li struct {
52*67e74705SXin Li   int a;
53*67e74705SXin Li   int __attribute__((packed)) b : 4;
54*67e74705SXin Li   int __attribute__((packed)) c : 32;
55*67e74705SXin Li } s41;
56*67e74705SXin Li CHECK_SIZE(s41,12)
57*67e74705SXin Li 
58*67e74705SXin Li #pragma pack (16)
59*67e74705SXin Li struct {
60*67e74705SXin Li   int a;
61*67e74705SXin Li   int b : 4;
62*67e74705SXin Li   int c : 32;
63*67e74705SXin Li } s5;
64*67e74705SXin Li CHECK_SIZE(s5,12)
65*67e74705SXin Li 
66*67e74705SXin Li #pragma pack (1)
67*67e74705SXin Li struct  __attribute__((aligned(4))) {
68*67e74705SXin Li   int a;
69*67e74705SXin Li   int b : 4;
70*67e74705SXin Li   int c : 32;
71*67e74705SXin Li } s6;
72*67e74705SXin Li CHECK_SIZE(s6,12)
73*67e74705SXin Li 
74*67e74705SXin Li #pragma pack (2)
75*67e74705SXin Li struct {
76*67e74705SXin Li   char a;
77*67e74705SXin Li   int b : 4;
78*67e74705SXin Li   int c : 32;
79*67e74705SXin Li   char s;
80*67e74705SXin Li } s7;
81*67e74705SXin Li CHECK_SIZE(s7,8)
82*67e74705SXin Li 
83*67e74705SXin Li #pragma pack (1)
84*67e74705SXin Li struct {
85*67e74705SXin Li   char a;
86*67e74705SXin Li   int b : 4;
87*67e74705SXin Li   int c : 28;
88*67e74705SXin Li   char s;
89*67e74705SXin Li } s8;
90*67e74705SXin Li CHECK_SIZE(s8,6)
91*67e74705SXin Li 
92*67e74705SXin Li #pragma pack (8)
93*67e74705SXin Li struct {
94*67e74705SXin Li   char a;
95*67e74705SXin Li   int b : 4;
96*67e74705SXin Li   int c : 28;
97*67e74705SXin Li   char s;
98*67e74705SXin Li } s9;
99*67e74705SXin Li CHECK_SIZE(s9,8)
100*67e74705SXin Li 
101*67e74705SXin Li #pragma pack (8)
102*67e74705SXin Li struct {
103*67e74705SXin Li   char a;
104*67e74705SXin Li   char s;
105*67e74705SXin Li } s10;
106*67e74705SXin Li CHECK_SIZE(s10,2)
107*67e74705SXin Li 
108*67e74705SXin Li #pragma pack(4)
109*67e74705SXin Li struct {
110*67e74705SXin Li   char a;
111*67e74705SXin Li   int b : 4;
112*67e74705SXin Li   int c : 28;
113*67e74705SXin Li   char s1;
114*67e74705SXin Li   char s2;
115*67e74705SXin Li   char s3;
116*67e74705SXin Li } s11;
117*67e74705SXin Li CHECK_SIZE(s11,8)
118*67e74705SXin Li 
119*67e74705SXin Li #pragma pack(4)
120*67e74705SXin Li struct {
121*67e74705SXin Li   short s1;
122*67e74705SXin Li   int a1 : 17;
123*67e74705SXin Li   int a2 : 17;
124*67e74705SXin Li   int a3 : 30;
125*67e74705SXin Li   short s2;
126*67e74705SXin Li } s12;
127*67e74705SXin Li CHECK_SIZE(s12,12)
128*67e74705SXin Li 
129*67e74705SXin Li #pragma pack(4)
130*67e74705SXin Li struct {
131*67e74705SXin Li   char c1;
132*67e74705SXin Li   int i1 : 17;
133*67e74705SXin Li   int i2 : 17;
134*67e74705SXin Li   int i3 : 30;
135*67e74705SXin Li   char c2;
136*67e74705SXin Li } s13;
137*67e74705SXin Li CHECK_SIZE(s13,12)
138*67e74705SXin Li 
139*67e74705SXin Li #pragma pack(2)
140*67e74705SXin Li struct {
141*67e74705SXin Li   char a;
142*67e74705SXin Li   int s;
143*67e74705SXin Li } s14;
144*67e74705SXin Li CHECK_SIZE(s14,6)
145*67e74705SXin Li 
146*67e74705SXin Li #pragma pack(4)
147*67e74705SXin Li struct {
148*67e74705SXin Li   char a;
149*67e74705SXin Li   short s;
150*67e74705SXin Li } s15;
151*67e74705SXin Li CHECK_SIZE(s15,4)
152*67e74705SXin Li 
153*67e74705SXin Li #pragma pack(2)
154*67e74705SXin Li struct {
155*67e74705SXin Li   char a;
156*67e74705SXin Li   int b : 4;
157*67e74705SXin Li   int c : 28;
158*67e74705SXin Li   char s1;
159*67e74705SXin Li   char s2;
160*67e74705SXin Li   char s3;
161*67e74705SXin Li } s16;
162*67e74705SXin Li CHECK_SIZE(s16,8)
163*67e74705SXin Li 
164*67e74705SXin Li #pragma pack (16)
165*67e74705SXin Li struct {
166*67e74705SXin Li   int __attribute__((packed)) a;
167*67e74705SXin Li   int __attribute__((packed)) b : 4;
168*67e74705SXin Li   int __attribute__((packed)) c : 32;
169*67e74705SXin Li } s17;
170*67e74705SXin Li CHECK_SIZE(s17,12)
171*67e74705SXin Li 
172*67e74705SXin Li #pragma pack (16)
173*67e74705SXin Li struct {
174*67e74705SXin Li   int __attribute__((aligned(8))) a;
175*67e74705SXin Li   int __attribute__((aligned(8))) b : 4;
176*67e74705SXin Li   int __attribute__((aligned(8))) c : 32;
177*67e74705SXin Li } s18;
178*67e74705SXin Li CHECK_SIZE(s18,24)
179*67e74705SXin Li 
180*67e74705SXin Li #pragma pack (16)
181*67e74705SXin Li struct {
182*67e74705SXin Li   int __attribute__((aligned(1))) a;
183*67e74705SXin Li   int __attribute__((aligned(1))) b : 4;
184*67e74705SXin Li   int __attribute__((aligned(1))) c : 32;
185*67e74705SXin Li } s19;
186*67e74705SXin Li CHECK_SIZE(s19,12)
187*67e74705SXin Li 
188*67e74705SXin Li #pragma pack (1)
189*67e74705SXin Li struct  __attribute__((aligned(8))) {
190*67e74705SXin Li   int a;
191*67e74705SXin Li   int b : 4;
192*67e74705SXin Li   int c : 32;
193*67e74705SXin Li } s20;
194*67e74705SXin Li CHECK_SIZE(s20,16)
195*67e74705SXin Li 
196*67e74705SXin Li #pragma pack (2)
197*67e74705SXin Li struct {
198*67e74705SXin Li   int __attribute__((aligned(8))) a;
199*67e74705SXin Li   int __attribute__((aligned(8))) b : 4;
200*67e74705SXin Li   int __attribute__((aligned(8))) c : 32;
201*67e74705SXin Li } s21;
202*67e74705SXin Li CHECK_SIZE(s21,10)
203