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