blob: 5dbd8446597ef71266956539161c7a10800a3e9a [file] [log] [blame]
Aaron Ballman674cf262015-05-26 19:44:52 +00001// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fms-extensions -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
David Majnemerba7f49a2014-10-03 07:41:09 +00002// RUN: | FileCheck %s
Aaron Ballman674cf262015-05-26 19:44:52 +00003// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fms-extensions -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
David Majnemerba7f49a2014-10-03 07:41:09 +00004// RUN: | FileCheck %s
5
6struct EmptyIntMemb {
7 int FlexArrayMemb[0];
8};
John McCall0d461692015-08-19 22:42:36 +00009// CHECK: *** Dumping AST Record Layout
10// CHECK-NEXT: 0 | struct EmptyIntMemb
11// CHECK-NEXT: 0 | int [0] FlexArrayMemb
12// CHECK-NEXT: | [sizeof=4, align=4
David Majnemerba7f49a2014-10-03 07:41:09 +000013
14struct EmptyLongLongMemb {
15 long long FlexArrayMemb[0];
16};
17// CHECK: *** Dumping AST Record Layout
John McCall0d461692015-08-19 22:42:36 +000018// CHECK-NEXT: 0 | struct EmptyLongLongMemb
19// CHECK-NEXT: 0 | long long [0] FlexArrayMemb
20// CHECK-NEXT: | [sizeof=4, align=8
David Majnemerba7f49a2014-10-03 07:41:09 +000021
22struct EmptyAligned2LongLongMemb {
23 long long __declspec(align(2)) FlexArrayMemb[0];
24};
25
26// CHECK: *** Dumping AST Record Layout
John McCall0d461692015-08-19 22:42:36 +000027// CHECK-NEXT: 0 | struct EmptyAligned2LongLongMemb
28// CHECK-NEXT: 0 | long long [0] FlexArrayMemb
29// CHECK-NEXT: | [sizeof=4, align=8
David Majnemerba7f49a2014-10-03 07:41:09 +000030
31struct EmptyAligned8LongLongMemb {
32 long long __declspec(align(8)) FlexArrayMemb[0];
33};
34
35// CHECK: *** Dumping AST Record Layout
John McCall0d461692015-08-19 22:42:36 +000036// CHECK-NEXT: 0 | struct EmptyAligned8LongLongMemb
37// CHECK-NEXT: 0 | long long [0] FlexArrayMemb
38// CHECK-NEXT: | [sizeof=8, align=8
David Majnemerba7f49a2014-10-03 07:41:09 +000039
40#pragma pack(1)
41struct __declspec(align(4)) EmptyPackedAligned4LongLongMemb {
42 long long FlexArrayMemb[0];
43};
44#pragma pack()
45
46// CHECK: *** Dumping AST Record Layout
John McCall0d461692015-08-19 22:42:36 +000047// CHECK-NEXT: 0 | struct EmptyPackedAligned4LongLongMemb
48// CHECK-NEXT: 0 | long long [0] FlexArrayMemb
49// CHECK-NEXT: | [sizeof=4, align=4
David Majnemerba7f49a2014-10-03 07:41:09 +000050
51#pragma pack(1)
52struct EmptyPackedAligned8LongLongMemb {
53 long long __declspec(align(8)) FlexArrayMemb[0];
54};
55#pragma pack()
56
57// CHECK: *** Dumping AST Record Layout
John McCall0d461692015-08-19 22:42:36 +000058// CHECK-NEXT: 0 | struct EmptyPackedAligned8LongLongMemb
59// CHECK-NEXT: 0 | long long [0] FlexArrayMemb
60// CHECK-NEXT: | [sizeof=8, align=8
David Majnemerba7f49a2014-10-03 07:41:09 +000061
62
63int a[
64sizeof(struct EmptyIntMemb)+
65sizeof(struct EmptyLongLongMemb)+
66sizeof(struct EmptyAligned2LongLongMemb)+
67sizeof(struct EmptyAligned8LongLongMemb)+
68sizeof(struct EmptyPackedAligned4LongLongMemb)+
69sizeof(struct EmptyPackedAligned8LongLongMemb)+
700];