1 // RUN: %clang_cc1 -emit-llvm-only -triple i386-apple-darwin9 %s 2 // rdar://8823265 3 4 #pragma pack(1) 5 struct _two_ms { 6 short m:9; // size is 2 7 int q:27; // size is 6 8 short w:13; // size is 8 9 short e:3; // size is 8 10 char r:4; // size is 9 11 char t:7; // size is 10 12 short y:16; // size is 12 13 // clang and gcc start differing here. clang seems to follow the rules. 14 short u:1; // size is clang: 13 gcc:14 15 char i:2; // size is 14 16 int a; // size is 18 17 char o:6; // size is 19 18 char s:2; // size is 19 19 short d:10; // size is 21 20 short f:4; // size is 21 21 char b; // size is 22 22 char g:1; // size is 23 23 short h:13; // size is 25 24 char j:8; // size is 26 25 char k:5; // size is 27 26 char c; // size is 28 27 int l:28; // size is 32 28 char z:7; // size is 33 29 int x:20; // size is clang: 36 gcc:38 30 } __attribute__((__ms_struct__)); 31 typedef struct _two_ms two_ms; 32 33 // gcc says size is 38, but its does not seem right! 34 static int a1[(sizeof(two_ms) == 36) - 1]; 35