// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fms-extensions -fdump-record-layouts %s 2>/dev/null \ | |
// RUN: | FileCheck %s | |
// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fms-extensions -fdump-record-layouts %s 2>/dev/null \ | |
// RUN: | FileCheck %s | |
typedef struct A { | |
char x; | |
int a : 22; | |
int : 0; | |
int c : 10; | |
char b : 3; | |
char d: 4; | |
short y; | |
} A; | |
// CHECK: Type: struct A | |
// CHECK: Size:128 | |
// CHECK: Alignment:32 | |
// CHECK: FieldOffsets: [0, 32, 64, 64, 96, 99, 112]> | |
typedef struct B { | |
char x; | |
int : 0; | |
short a : 4; | |
char y; | |
} B; | |
// CHECK: Type: struct B | |
// CHECK: Size:48 | |
// CHECK: Alignment:16 | |
// CHECK: FieldOffsets: [0, 8, 16, 32]> | |
typedef struct C { | |
char x; | |
short a : 4; | |
int : 0; | |
char y; | |
} C; | |
// CHECK: Type: struct C | |
// CHECK: Size:64 | |
// CHECK: Alignment:32 | |
// CHECK: FieldOffsets: [0, 16, 32, 32]> | |
typedef struct D { | |
char x; | |
short : 0; | |
int : 0; | |
char y; | |
} D; | |
// CHECK: Type: struct D | |
// CHECK: Size:16 | |
// CHECK: Alignment:8 | |
// CHECK: FieldOffsets: [0, 8, 8, 8]> | |
typedef union E { | |
char x; | |
long long a : 3; | |
int b : 3; | |
long long : 0; | |
short y; | |
} E; | |
// CHECK: Type: union E | |
// CHECK: Size:64 | |
// CHECK: Alignment:16 | |
// CHECK: FieldOffsets: [0, 0, 0, 0, 0]> | |
typedef struct F { | |
char x; | |
char a : 3; | |
char b : 3; | |
char c : 3; | |
short d : 6; | |
short e : 6; | |
short f : 6; | |
short g : 11; | |
short h : 11; | |
short i : 11; | |
short y; | |
} F; | |
// CHECK: Type: struct F | |
// CHECK: Size:128 | |
// CHECK: Alignment:16 | |
// CHECK: FieldOffsets: [0, 8, 11, 16, 32, 38, 48, 64, 80, 96, 112]> | |
typedef union G { | |
char x; | |
int a : 3; | |
int : 0; | |
long long : 0; | |
short y; | |
} G; | |
// CHECK: Type: union G | |
// CHECK: Size:32 | |
// CHECK: Alignment:16 | |
// CHECK: FieldOffsets: [0, 0, 0, 0, 0]> | |
typedef struct H { | |
unsigned short a : 1; | |
unsigned char : 0; | |
unsigned long : 0; | |
unsigned short c : 1; | |
} H; | |
// CHECK: Type: struct H | |
// CHECK: Size:32 | |
// CHECK: Alignment:16 | |
// CHECK: FieldOffsets: [0, 16, 16, 16]> | |
typedef struct I { | |
short : 8; | |
__declspec(align(16)) short : 8; | |
} I; | |
// CHECK: Type: struct I | |
// CHECK: Size:16 | |
// CHECK: Alignment:16 | |
// CHECK: FieldOffsets: [0, 8] | |
#pragma pack(push, 1) | |
typedef struct A1 { | |
char x; | |
int a : 22; | |
int : 0; | |
int c : 10; | |
char b : 3; | |
char d: 4; | |
short y; | |
} A1; | |
// CHECK: Type: struct A1 | |
// CHECK: Size:96 | |
// CHECK: Alignment:8 | |
// CHECK: FieldOffsets: [0, 8, 40, 40, 72, 75, 80]> | |
typedef struct B1 { | |
char x; | |
int : 0; | |
short a : 4; | |
char y; | |
} B1; | |
// CHECK: Type: struct B1 | |
// CHECK: Size:32 | |
// CHECK: Alignment:8 | |
// CHECK: FieldOffsets: [0, 8, 8, 24]> | |
typedef struct C1 { | |
char x; | |
short a : 4; | |
int : 0; | |
char y; | |
} C1; | |
// CHECK: Type: struct C1 | |
// CHECK: Size:32 | |
// CHECK: Alignment:8 | |
// CHECK: FieldOffsets: [0, 8, 24, 24]> | |
typedef struct D1 { | |
char x; | |
short : 0; | |
int : 0; | |
char y; | |
} D1; | |
// CHECK: Type: struct D1 | |
// CHECK: Size:16 | |
// CHECK: Alignment:8 | |
// CHECK: FieldOffsets: [0, 8, 8, 8]> | |
typedef union E1 { | |
char x; | |
long long a : 3; | |
int b : 3; | |
long long : 0; | |
short y; | |
} E1; | |
// CHECK: Type: union E1 | |
// CHECK: Size:64 | |
// CHECK: Alignment:8 | |
// CHECK: FieldOffsets: [0, 0, 0, 0, 0]> | |
typedef struct F1 { | |
char x; | |
char a : 3; | |
char b : 3; | |
char c : 3; | |
short d : 6; | |
short e : 6; | |
short f : 6; | |
short g : 11; | |
short h : 11; | |
short i : 11; | |
short y; | |
} F1; | |
// CHECK: Type: struct F1 | |
// CHECK: Size:120 | |
// CHECK: Alignment:8 | |
// CHECK: FieldOffsets: [0, 8, 11, 16, 24, 30, 40, 56, 72, 88, 104]> | |
typedef union G1 { | |
char x; | |
int a : 3; | |
int : 0; | |
long long : 0; | |
short y; | |
} G1; | |
// CHECK: Type: union G1 | |
// CHECK: Size:32 | |
// CHECK: Alignment:8 | |
// CHECK: FieldOffsets: [0, 0, 0, 0, 0]> | |
typedef struct H1 { | |
unsigned long a : 1; | |
unsigned char : 0; | |
unsigned long : 0; | |
unsigned long c : 1; | |
} H1; | |
// CHECK: Type: struct H1 | |
// CHECK: Size:64 | |
// CHECK: Alignment:8 | |
// CHECK: FieldOffsets: [0, 32, 32, 32]> | |
typedef struct I1 { | |
short : 8; | |
__declspec(align(16)) short : 8; | |
} I1; | |
// CHECK: Type: struct I1 | |
// CHECK: Size:16 | |
// CHECK: Alignment:8 | |
// CHECK: FieldOffsets: [0, 8] | |
#pragma pack(pop) | |
int x[ | |
sizeof(A ) + | |
sizeof(B ) + | |
sizeof(C ) + | |
sizeof(D ) + | |
sizeof(E ) + | |
sizeof(F ) + | |
sizeof(G ) + | |
sizeof(H ) + | |
sizeof(I ) + | |
sizeof(A1) + | |
sizeof(B1) + | |
sizeof(C1) + | |
sizeof(D1) + | |
sizeof(E1) + | |
sizeof(F1) + | |
sizeof(G1) + | |
sizeof(H1) + | |
sizeof(I1) + | |
0]; |