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