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