1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -emit-llvm-only -triple i386-apple-darwin9 -fdump-record-layouts %s | FileCheck %s 2ed63e03e35f2c8ad1a06d7bbc2249d132a730175Fariborz Jahanian// rdar://8823265 3ed63e03e35f2c8ad1a06d7bbc2249d132a730175Fariborz Jahanian 4ed63e03e35f2c8ad1a06d7bbc2249d132a730175Fariborz Jahanian#pragma pack(1) 56ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanianstruct _one_ms { 66ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian short m:9; // size is 2 76ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian int q:27; // size is 6 86ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian short w:13; // size is 8 96ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian short e:3; // size is 8 106ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian char r:4; // size is 9 116ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian char t:7; // size is 10 126ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian short y:16; // size is 12 136ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian short u:1; // size is 14 146ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian char i:2; // size is 15 156ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian int a; // size is 19 166ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian char o:6; // size is 20 176ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian char s:2; // size is 20 186ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian short d:10; // size is 22 196ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian short f:4; // size is 22 206ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian char b; // size is 23 216ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian char g:1; // size is 24 226ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian short h:13; // size is 26 236ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian char j:8; // size is 27 246ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian char k:5; // size is 28 256ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian char c; // size is 29 266ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian int l:28; // size is 33 276ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian char z:7; // size is 34 286ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian int x:20; // size is 38 296ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian} __attribute__((__ms_struct__)); 306ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahaniantypedef struct _one_ms one_ms; 316ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian 326ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanianstatic int a1[(sizeof(one_ms) == 38) - 1]; 336ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian 346ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian#pragma pack(2) 35ed63e03e35f2c8ad1a06d7bbc2249d132a730175Fariborz Jahanianstruct _two_ms { 36225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short m:9; 37225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian int q:27; 38225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short w:13; 39225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short e:3; 40225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char r:4; 41225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char t:7; 42225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short y:16; 43225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short u:1; 44225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char i:2; 45225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian int a; 46225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char o:6; 47225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char s:2; 48225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short d:10; 49225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short f:4; 50225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char b; 51225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char g:1; 52225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short h:13; 53225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char j:8; 54225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char k:5; 55225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char c; 56225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian int l:28; 57225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char z:7; 58225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian int x:20; 596ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian} __attribute__((__ms_struct__)); 606ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian 61ed63e03e35f2c8ad1a06d7bbc2249d132a730175Fariborz Jahaniantypedef struct _two_ms two_ms; 62ed63e03e35f2c8ad1a06d7bbc2249d132a730175Fariborz Jahanian 636ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanianstatic int a2[(sizeof(two_ms) == 42) - 1]; 646ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian 656ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian#pragma pack(4) 666ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanianstruct _four_ms { 67225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short m:9; 68225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian int q:27; 69225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short w:13; 70225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short e:3; 71225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char r:4; 72225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char t:7; 73225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short y:16; 74225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short u:1; 75225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char i:2; 76225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian int a; 77225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char o:6; 78225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char s:2; 79225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short d:10; 80225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short f:4; 81225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char b; 82225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char g:1; 83225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short h:13; 84225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char j:8; 85225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char k:5; 86225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char c; 87225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian int l:28; 88225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char z:7; 89225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian int x:20; 906ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian} __attribute__((__ms_struct__)); 916ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahaniantypedef struct _four_ms four_ms; 926ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian 936ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanianstatic int a4[(sizeof(four_ms) == 48) - 1]; 946ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian 956ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian#pragma pack(8) 966ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanianstruct _eight_ms { 97225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short m:9; 98225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian int q:27; 99225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short w:13; 100225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short e:3; 101225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char r:4; 102225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char t:7; 103225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short y:16; 104225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short u:1; 105225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char i:2; 106225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian int a; 107225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char o:6; 108225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char s:2; 109225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short d:10; 110225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short f:4; 111225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char b; 112225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char g:1; 113225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian short h:13; 114225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char j:8; 115225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char k:5; 116225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char c; 117225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian int l:28; 118225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian char z:7; 119225c5dda5a9c85b7bee5d955875e239f70924f74Fariborz Jahanian int x:20; 1206ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian} __attribute__((__ms_struct__)); 1216ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian 1226ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahaniantypedef struct _eight_ms eight_ms; 1236ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian 1246ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanianstatic int a8[(sizeof(eight_ms) == 48) - 1]; 1256ec50ad4b12cbb6ca12036080808f912d5ee2515Fariborz Jahanian 126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// rdar://15926990 127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(2) 128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct test0 { 129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned long a : 8; 130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned long b : 8; 131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned long c : 8; 132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned long d : 10; 133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned long e : 1; 134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} __attribute__((__ms_struct__)); 135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: Type: struct test0 137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: Record: 138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: Layout: 139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: Size:64 140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: DataSize:64 141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: Alignment:16 142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: FieldOffsets: [0, 8, 16, 32, 42]> 143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstatic int test0[(sizeof(struct test0) == 8) ? 1 : -1]; 145