1 // RUN: %clang_cc1 -triple i686-apple-darwin9 %s -fsyntax-only -verify 2 3 #include <stddef.h> 4 5 #pragma pack(4) 6 7 // Baseline 8 struct s0 { 9 char f0; 10 int f1; 11 }; 12 extern int a0[offsetof(struct s0, f1) == 4 ? 1 : -1]; 13 14 #pragma pack(push, 2) 15 struct s1 { 16 char f0; 17 int f1; 18 }; 19 extern int a1[offsetof(struct s1, f1) == 2 ? 1 : -1]; 20 #pragma pack(pop) 21 22 // Test scope of definition 23 24 #pragma pack(push, 2) 25 struct s2_0 { 26 #pragma pack(pop) 27 char f0; 28 int f1; 29 }; 30 extern int a2_0[offsetof(struct s2_0, f1) == 2 ? 1 : -1]; 31 32 struct s2_1 { 33 char f0; 34 #pragma pack(push, 2) 35 int f1; 36 #pragma pack(pop) 37 }; 38 extern int a2_1[offsetof(struct s2_1, f1) == 4 ? 1 : -1]; 39 40 struct s2_2 { 41 char f0; 42 int f1; 43 #pragma pack(push, 2) 44 }; 45 #pragma pack(pop) 46 extern int a2_2[offsetof(struct s2_2, f1) == 4 ? 1 : -1]; 47 48 struct s2_3 { 49 char f0; 50 #pragma pack(push, 2) 51 struct s2_3_0 { 52 #pragma pack(pop) 53 int f0; 54 } f1; 55 }; 56 extern int a2_3[offsetof(struct s2_3, f1) == 2 ? 1 : -1]; 57 58 struct s2_4 { 59 char f0; 60 struct s2_4_0 { 61 int f0; 62 #pragma pack(push, 2) 63 } f1; 64 #pragma pack(pop) 65 }; 66 extern int a2_4[offsetof(struct s2_4, f1) == 4 ? 1 : -1]; 67 68 #pragma pack(1) 69 struct s3_0 { 70 char f0; 71 int f1; 72 }; 73 #pragma pack() 74 struct s3_1 { 75 char f0; 76 int f1; 77 }; 78 extern int a3_0[offsetof(struct s3_0, f1) == 1 ? 1 : -1]; 79 extern int a3_1[offsetof(struct s3_1, f1) == 4 ? 1 : -1]; 80 81 // pack(0) is like pack() 82 #pragma pack(1) 83 struct s4_0 { 84 char f0; 85 int f1; 86 }; 87 #pragma pack(0) 88 struct s4_1 { 89 char f0; 90 int f1; 91 }; 92 extern int a4_0[offsetof(struct s4_0, f1) == 1 ? 1 : -1]; 93 extern int a4_1[offsetof(struct s4_1, f1) == 4 ? 1 : -1]; 94