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