// 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];