ms_bitfield_layout.c revision 7967c95891c5f65f6312fbbcb999ac257d776914
1// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -cxx-abi microsoft -fdump-record-layouts %s 2>/dev/null \ 2// RUN: | FileCheck %s 3// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -cxx-abi microsoft -fdump-record-layouts %s 2>/dev/null \ 4// RUN: | FileCheck %s 5 6typedef struct A { 7 char x; 8 int a : 22; 9 int : 0; 10 int c : 10; 11 char b : 3; 12 char d: 4; 13 short y; 14} A; 15 16// CHECK: Type: struct A 17// CHECK: Size:128 18// CHECK: Alignment:32 19// CHECK: FieldOffsets: [0, 32, 64, 64, 96, 99, 112]> 20 21typedef struct B { 22 char x; 23 int : 0; 24 short a : 4; 25 char y; 26} B; 27 28// CHECK: Type: struct B 29// CHECK: Size:48 30// CHECK: Alignment:16 31// CHECK: FieldOffsets: [0, 8, 16, 32]> 32 33typedef struct C { 34 char x; 35 short a : 4; 36 int : 0; 37 char y; 38} C; 39 40// CHECK: Type: struct C 41// CHECK: Size:64 42// CHECK: Alignment:32 43// CHECK: FieldOffsets: [0, 16, 32, 32]> 44 45typedef struct D { 46 char x; 47 short : 0; 48 int : 0; 49 char y; 50} D; 51 52// CHECK: Type: struct D 53// CHECK: Size:16 54// CHECK: Alignment:8 55// CHECK: FieldOffsets: [0, 8, 8, 8]> 56 57typedef union E { 58 char x; 59 long long a : 3; 60 int b : 3; 61 long long : 0; 62 short y; 63} E; 64 65// CHECK: Type: union E 66// CHECK: Size:64 67// CHECK: Alignment:16 68// CHECK: FieldOffsets: [0, 0, 0, 0, 0]> 69 70typedef struct F { 71 char x; 72 char a : 3; 73 char b : 3; 74 char c : 3; 75 short d : 6; 76 short e : 6; 77 short f : 6; 78 short g : 11; 79 short h : 11; 80 short i : 11; 81 short y; 82} F; 83 84// CHECK: Type: struct F 85// CHECK: Size:128 86// CHECK: Alignment:16 87// CHECK: FieldOffsets: [0, 8, 11, 16, 32, 38, 48, 64, 80, 96, 112]> 88 89typedef union G { 90 char x; 91 int a : 3; 92 int : 0; 93 long long : 0; 94 short y; 95} G; 96 97// CHECK: Type: union G 98// CHECK: Size:32 99// CHECK: Alignment:16 100// CHECK: FieldOffsets: [0, 0, 0, 0, 0]> 101 102typedef struct H { 103 unsigned short a : 1; 104 unsigned char : 0; 105 unsigned long : 0; 106 unsigned short c : 1; 107} H; 108 109// CHECK: Type: struct H 110// CHECK: Size:32 111// CHECK: Alignment:16 112// CHECK: FieldOffsets: [0, 16, 16, 16]> 113 114#pragma pack(push, 1) 115 116typedef struct A1 { 117 char x; 118 int a : 22; 119 int : 0; 120 int c : 10; 121 char b : 3; 122 char d: 4; 123 short y; 124} A1; 125 126// CHECK: Type: struct A1 127// CHECK: Size:96 128// CHECK: Alignment:8 129// CHECK: FieldOffsets: [0, 8, 40, 40, 72, 75, 80]> 130 131typedef struct B1 { 132 char x; 133 int : 0; 134 short a : 4; 135 char y; 136} B1; 137 138// CHECK: Type: struct B1 139// CHECK: Size:32 140// CHECK: Alignment:8 141// CHECK: FieldOffsets: [0, 8, 8, 24]> 142 143typedef struct C1 { 144 char x; 145 short a : 4; 146 int : 0; 147 char y; 148} C1; 149 150// CHECK: Type: struct C1 151// CHECK: Size:32 152// CHECK: Alignment:8 153// CHECK: FieldOffsets: [0, 8, 24, 24]> 154 155typedef struct D1 { 156 char x; 157 short : 0; 158 int : 0; 159 char y; 160} D1; 161 162// CHECK: Type: struct D1 163// CHECK: Size:16 164// CHECK: Alignment:8 165// CHECK: FieldOffsets: [0, 8, 8, 8]> 166 167typedef union E1 { 168 char x; 169 long long a : 3; 170 int b : 3; 171 long long : 0; 172 short y; 173} E1; 174 175// CHECK: Type: union E1 176// CHECK: Size:64 177// CHECK: Alignment:8 178// CHECK: FieldOffsets: [0, 0, 0, 0, 0]> 179 180typedef struct F1 { 181 char x; 182 char a : 3; 183 char b : 3; 184 char c : 3; 185 short d : 6; 186 short e : 6; 187 short f : 6; 188 short g : 11; 189 short h : 11; 190 short i : 11; 191 short y; 192} F1; 193 194// CHECK: Type: struct F1 195// CHECK: Size:120 196// CHECK: Alignment:8 197// CHECK: FieldOffsets: [0, 8, 11, 16, 24, 30, 40, 56, 72, 88, 104]> 198 199typedef union G1 { 200 char x; 201 int a : 3; 202 int : 0; 203 long long : 0; 204 short y; 205} G1; 206 207// CHECK: Type: union G1 208// CHECK: Size:32 209// CHECK: Alignment:8 210// CHECK: FieldOffsets: [0, 0, 0, 0, 0]> 211 212typedef struct H1 { 213 unsigned long a : 1; 214 unsigned char : 0; 215 unsigned long : 0; 216 unsigned long c : 1; 217} H1; 218 219// CHECK: Type: struct H1 220// CHECK: Size:64 221// CHECK: Alignment:8 222// CHECK: FieldOffsets: [0, 32, 32, 32]> 223 224#pragma pack(pop) 225 226int x[ 227sizeof(A ) + 228sizeof(B ) + 229sizeof(C ) + 230sizeof(D ) + 231sizeof(E ) + 232sizeof(F ) + 233sizeof(G ) + 234sizeof(H ) + 235sizeof(A1) + 236sizeof(B1) + 237sizeof(C1) + 238sizeof(D1) + 239sizeof(E1) + 240sizeof(F1) + 241sizeof(G1) + 242sizeof(H1) + 2430]; 244