1*67e74705SXin Li // RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fms-extensions -fdump-record-layouts -fsyntax-only %s 2>/dev/null \ 2*67e74705SXin Li // RUN: | FileCheck %s 3*67e74705SXin Li // RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fms-extensions -fdump-record-layouts -fsyntax-only %s 2>/dev/null \ 4*67e74705SXin Li // RUN: | FileCheck %s 5*67e74705SXin Li 6*67e74705SXin Li struct EmptyIntMemb { 7*67e74705SXin Li int FlexArrayMemb[0]; 8*67e74705SXin Li }; 9*67e74705SXin Li // CHECK: *** Dumping AST Record Layout 10*67e74705SXin Li // CHECK-NEXT: 0 | struct EmptyIntMemb 11*67e74705SXin Li // CHECK-NEXT: 0 | int [0] FlexArrayMemb 12*67e74705SXin Li // CHECK-NEXT: | [sizeof=4, align=4 13*67e74705SXin Li 14*67e74705SXin Li struct EmptyLongLongMemb { 15*67e74705SXin Li long long FlexArrayMemb[0]; 16*67e74705SXin Li }; 17*67e74705SXin Li // CHECK: *** Dumping AST Record Layout 18*67e74705SXin Li // CHECK-NEXT: 0 | struct EmptyLongLongMemb 19*67e74705SXin Li // CHECK-NEXT: 0 | long long [0] FlexArrayMemb 20*67e74705SXin Li // CHECK-NEXT: | [sizeof=4, align=8 21*67e74705SXin Li 22*67e74705SXin Li struct EmptyAligned2LongLongMemb { 23*67e74705SXin Li long long __declspec(align(2)) FlexArrayMemb[0]; 24*67e74705SXin Li }; 25*67e74705SXin Li 26*67e74705SXin Li // CHECK: *** Dumping AST Record Layout 27*67e74705SXin Li // CHECK-NEXT: 0 | struct EmptyAligned2LongLongMemb 28*67e74705SXin Li // CHECK-NEXT: 0 | long long [0] FlexArrayMemb 29*67e74705SXin Li // CHECK-NEXT: | [sizeof=4, align=8 30*67e74705SXin Li 31*67e74705SXin Li struct EmptyAligned8LongLongMemb { 32*67e74705SXin Li long long __declspec(align(8)) FlexArrayMemb[0]; 33*67e74705SXin Li }; 34*67e74705SXin Li 35*67e74705SXin Li // CHECK: *** Dumping AST Record Layout 36*67e74705SXin Li // CHECK-NEXT: 0 | struct EmptyAligned8LongLongMemb 37*67e74705SXin Li // CHECK-NEXT: 0 | long long [0] FlexArrayMemb 38*67e74705SXin Li // CHECK-NEXT: | [sizeof=8, align=8 39*67e74705SXin Li 40*67e74705SXin Li #pragma pack(1) 41*67e74705SXin Li struct __declspec(align(4)) EmptyPackedAligned4LongLongMemb { 42*67e74705SXin Li long long FlexArrayMemb[0]; 43*67e74705SXin Li }; 44*67e74705SXin Li #pragma pack() 45*67e74705SXin Li 46*67e74705SXin Li // CHECK: *** Dumping AST Record Layout 47*67e74705SXin Li // CHECK-NEXT: 0 | struct EmptyPackedAligned4LongLongMemb 48*67e74705SXin Li // CHECK-NEXT: 0 | long long [0] FlexArrayMemb 49*67e74705SXin Li // CHECK-NEXT: | [sizeof=4, align=4 50*67e74705SXin Li 51*67e74705SXin Li #pragma pack(1) 52*67e74705SXin Li struct EmptyPackedAligned8LongLongMemb { 53*67e74705SXin Li long long __declspec(align(8)) FlexArrayMemb[0]; 54*67e74705SXin Li }; 55*67e74705SXin Li #pragma pack() 56*67e74705SXin Li 57*67e74705SXin Li // CHECK: *** Dumping AST Record Layout 58*67e74705SXin Li // CHECK-NEXT: 0 | struct EmptyPackedAligned8LongLongMemb 59*67e74705SXin Li // CHECK-NEXT: 0 | long long [0] FlexArrayMemb 60*67e74705SXin Li // CHECK-NEXT: | [sizeof=8, align=8 61*67e74705SXin Li 62*67e74705SXin Li 63*67e74705SXin Li int a[ 64*67e74705SXin Li sizeof(struct EmptyIntMemb)+ 65*67e74705SXin Li sizeof(struct EmptyLongLongMemb)+ 66*67e74705SXin Li sizeof(struct EmptyAligned2LongLongMemb)+ 67*67e74705SXin Li sizeof(struct EmptyAligned8LongLongMemb)+ 68*67e74705SXin Li sizeof(struct EmptyPackedAligned4LongLongMemb)+ 69*67e74705SXin Li sizeof(struct EmptyPackedAligned8LongLongMemb)+ 70*67e74705SXin Li 0]; 71