1*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm-only -triple i386-apple-darwin9 -fdump-record-layouts %s | FileCheck %s 2*67e74705SXin Li // rdar://8823265 3*67e74705SXin Li 4*67e74705SXin Li #pragma pack(1) 5*67e74705SXin Li struct _one_ms { 6*67e74705SXin Li short m:9; // size is 2 7*67e74705SXin Li int q:27; // size is 6 8*67e74705SXin Li short w:13; // size is 8 9*67e74705SXin Li short e:3; // size is 8 10*67e74705SXin Li char r:4; // size is 9 11*67e74705SXin Li char t:7; // size is 10 12*67e74705SXin Li short y:16; // size is 12 13*67e74705SXin Li short u:1; // size is 14 14*67e74705SXin Li char i:2; // size is 15 15*67e74705SXin Li int a; // size is 19 16*67e74705SXin Li char o:6; // size is 20 17*67e74705SXin Li char s:2; // size is 20 18*67e74705SXin Li short d:10; // size is 22 19*67e74705SXin Li short f:4; // size is 22 20*67e74705SXin Li char b; // size is 23 21*67e74705SXin Li char g:1; // size is 24 22*67e74705SXin Li short h:13; // size is 26 23*67e74705SXin Li char j:8; // size is 27 24*67e74705SXin Li char k:5; // size is 28 25*67e74705SXin Li char c; // size is 29 26*67e74705SXin Li int l:28; // size is 33 27*67e74705SXin Li char z:7; // size is 34 28*67e74705SXin Li int x:20; // size is 38 29*67e74705SXin Li } __attribute__((__ms_struct__)); 30*67e74705SXin Li typedef struct _one_ms one_ms; 31*67e74705SXin Li 32*67e74705SXin Li static int a1[(sizeof(one_ms) == 38) - 1]; 33*67e74705SXin Li 34*67e74705SXin Li #pragma pack(2) 35*67e74705SXin Li struct _two_ms { 36*67e74705SXin Li short m:9; 37*67e74705SXin Li int q:27; 38*67e74705SXin Li short w:13; 39*67e74705SXin Li short e:3; 40*67e74705SXin Li char r:4; 41*67e74705SXin Li char t:7; 42*67e74705SXin Li short y:16; 43*67e74705SXin Li short u:1; 44*67e74705SXin Li char i:2; 45*67e74705SXin Li int a; 46*67e74705SXin Li char o:6; 47*67e74705SXin Li char s:2; 48*67e74705SXin Li short d:10; 49*67e74705SXin Li short f:4; 50*67e74705SXin Li char b; 51*67e74705SXin Li char g:1; 52*67e74705SXin Li short h:13; 53*67e74705SXin Li char j:8; 54*67e74705SXin Li char k:5; 55*67e74705SXin Li char c; 56*67e74705SXin Li int l:28; 57*67e74705SXin Li char z:7; 58*67e74705SXin Li int x:20; 59*67e74705SXin Li } __attribute__((__ms_struct__)); 60*67e74705SXin Li 61*67e74705SXin Li typedef struct _two_ms two_ms; 62*67e74705SXin Li 63*67e74705SXin Li static int a2[(sizeof(two_ms) == 42) - 1]; 64*67e74705SXin Li 65*67e74705SXin Li #pragma pack(4) 66*67e74705SXin Li struct _four_ms { 67*67e74705SXin Li short m:9; 68*67e74705SXin Li int q:27; 69*67e74705SXin Li short w:13; 70*67e74705SXin Li short e:3; 71*67e74705SXin Li char r:4; 72*67e74705SXin Li char t:7; 73*67e74705SXin Li short y:16; 74*67e74705SXin Li short u:1; 75*67e74705SXin Li char i:2; 76*67e74705SXin Li int a; 77*67e74705SXin Li char o:6; 78*67e74705SXin Li char s:2; 79*67e74705SXin Li short d:10; 80*67e74705SXin Li short f:4; 81*67e74705SXin Li char b; 82*67e74705SXin Li char g:1; 83*67e74705SXin Li short h:13; 84*67e74705SXin Li char j:8; 85*67e74705SXin Li char k:5; 86*67e74705SXin Li char c; 87*67e74705SXin Li int l:28; 88*67e74705SXin Li char z:7; 89*67e74705SXin Li int x:20; 90*67e74705SXin Li } __attribute__((__ms_struct__)); 91*67e74705SXin Li typedef struct _four_ms four_ms; 92*67e74705SXin Li 93*67e74705SXin Li static int a4[(sizeof(four_ms) == 48) - 1]; 94*67e74705SXin Li 95*67e74705SXin Li #pragma pack(8) 96*67e74705SXin Li struct _eight_ms { 97*67e74705SXin Li short m:9; 98*67e74705SXin Li int q:27; 99*67e74705SXin Li short w:13; 100*67e74705SXin Li short e:3; 101*67e74705SXin Li char r:4; 102*67e74705SXin Li char t:7; 103*67e74705SXin Li short y:16; 104*67e74705SXin Li short u:1; 105*67e74705SXin Li char i:2; 106*67e74705SXin Li int a; 107*67e74705SXin Li char o:6; 108*67e74705SXin Li char s:2; 109*67e74705SXin Li short d:10; 110*67e74705SXin Li short f:4; 111*67e74705SXin Li char b; 112*67e74705SXin Li char g:1; 113*67e74705SXin Li short h:13; 114*67e74705SXin Li char j:8; 115*67e74705SXin Li char k:5; 116*67e74705SXin Li char c; 117*67e74705SXin Li int l:28; 118*67e74705SXin Li char z:7; 119*67e74705SXin Li int x:20; 120*67e74705SXin Li } __attribute__((__ms_struct__)); 121*67e74705SXin Li 122*67e74705SXin Li typedef struct _eight_ms eight_ms; 123*67e74705SXin Li 124*67e74705SXin Li static int a8[(sizeof(eight_ms) == 48) - 1]; 125*67e74705SXin Li 126*67e74705SXin Li // rdar://15926990 127*67e74705SXin Li #pragma pack(2) 128*67e74705SXin Li struct test0 { 129*67e74705SXin Li unsigned long a : 8; 130*67e74705SXin Li unsigned long b : 8; 131*67e74705SXin Li unsigned long c : 8; 132*67e74705SXin Li unsigned long d : 10; 133*67e74705SXin Li unsigned long e : 1; 134*67e74705SXin Li } __attribute__((__ms_struct__)); 135*67e74705SXin Li 136*67e74705SXin Li // CHECK: 0 | struct test0 137*67e74705SXin Li // CHECK-NEXT: 0:0-7 | unsigned long a 138*67e74705SXin Li // CHECK-NEXT: 1:0-7 | unsigned long b 139*67e74705SXin Li // CHECK-NEXT: 2:0-7 | unsigned long c 140*67e74705SXin Li // CHECK-NEXT: 4:0-9 | unsigned long d 141*67e74705SXin Li // CHECK-NEXT: 5:2-2 | unsigned long e 142*67e74705SXin Li // CHECK-NEXT: | [sizeof=8, align=2] 143*67e74705SXin Li 144*67e74705SXin Li static int test0[(sizeof(struct test0) == 8) ? 1 : -1]; 145