1 // RUN: %clang_cc1 -triple i686-apple-darwin9 %s -fsyntax-only -verify
2 // expected-no-diagnostics
3 
4 #include <stddef.h>
5 
6 #pragma pack(4)
7 
8 // Baseline
9 struct s0 {
10   char f0;
11   int  f1;
12 };
13 extern int a0[offsetof(struct s0, f1) == 4 ? 1 : -1];
14 
15 #pragma pack(push, 2)
16 struct s1 {
17   char f0;
18   int  f1;
19 };
20 extern int a1[offsetof(struct s1, f1) == 2 ? 1 : -1];
21 #pragma pack(pop)
22 
23 #pragma pack(1)
24 struct s3_0 {
25   char f0;
26   int f1;
27 };
28 #pragma pack()
29 struct s3_1 {
30   char f0;
31   int f1;
32 };
33 extern int a3_0[offsetof(struct s3_0, f1) == 1 ? 1 : -1];
34 extern int a3_1[offsetof(struct s3_1, f1) == 4 ? 1 : -1];
35 
36 // pack(0) is like pack()
37 #pragma pack(1)
38 struct s4_0 {
39   char f0;
40   int f1;
41 };
42 #pragma pack(0)
43 struct s4_1 {
44   char f0;
45   int f1;
46 };
47 extern int a4_0[offsetof(struct s4_0, f1) == 1 ? 1 : -1];
48 extern int a4_1[offsetof(struct s4_1, f1) == 4 ? 1 : -1];
49 
f()50 void f() {
51   #pragma pack(push, 2)
52   struct s5_0 {
53     char f0;
54     struct s2_4_0 {
55       int f0;
56     } f1;
57   };
58   #pragma pack(pop)
59   extern int s5_0[offsetof(struct s5_0, f1) == 2 ? 1 : -1];
60 }
61