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