1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>&1 \
292563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt// RUN:            | FileCheck %s
3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
492563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt// RUN:            | FileCheck %s -check-prefix CHECK-X64
592563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt
6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct B0 { int a; };
7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct B1 { int a; };
892563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt
9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct A : virtual B0 { char a : 1; };
10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct A
14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (A vbtable pointer)
15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   char a
166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    8 |   struct B0 (virtual base)
176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    8 |     int a
186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=12, align=4
19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=4]
2092563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt// CHECK-X64: *** Dumping AST Record Layout
21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct A
23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (A vbtable pointer)
24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   char a
256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   16 |   struct B0 (virtual base)
266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   16 |     int a
27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=24, align=8
28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
2992563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt
30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct B : virtual B0 { short a : 1; };
3192563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt
3292563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt// CHECK: *** Dumping AST Record Layout
33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct B
34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (B vbtable pointer)
35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   short a
366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    8 |   struct B0 (virtual base)
376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    8 |     int a
386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=12, align=4
39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=4]
4092563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt// CHECK-X64: *** Dumping AST Record Layout
41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct B
42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (B vbtable pointer)
43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   short a
446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   16 |   struct B0 (virtual base)
456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   16 |     int a
46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=24, align=8
47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
4892563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt
49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct C : virtual B0 { char a : 1; char : 0; };
5092563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt
5192563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt// CHECK: *** Dumping AST Record Layout
52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct C
53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (C vbtable pointer)
54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   char a
55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    5 |   char
56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct B0 (virtual base)
57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     int a
58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=12, align=4
59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=4]
6092563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt// CHECK-X64: *** Dumping AST Record Layout
61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct C
62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (C vbtable pointer)
63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   char a
64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    9 |   char
65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B0 (virtual base)
66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=24, align=8
68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
6992563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt
70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct D : virtual B0 { char a : 1; char b; };
7192563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt
7292563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt// CHECK: *** Dumping AST Record Layout
73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct D
74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (D vbtable pointer)
75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   char a
76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    5 |   char b
77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct B0 (virtual base)
78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     int a
79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=12, align=4
80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=4]
81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct D
83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (D vbtable pointer)
84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   char a
85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    9 |   char b
86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B0 (virtual base)
87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=24, align=8
89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct E : virtual B0, virtual B1 { long long : 1; };
92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct E
95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (E vbtable pointer)
96651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   long long
976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:   16 |   struct B0 (virtual base)
986bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:   16 |     int a
996bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:   20 |   struct B1 (virtual base)
1006bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:   20 |     int a
1016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=24, align=8
102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=16, nvalign=8]
103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
10492563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt// CHECK-X64: *** Dumping AST Record Layout
105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct E
106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (E vbtable pointer)
107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   long long
1086bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   16 |   struct B0 (virtual base)
1096bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   16 |     int a
1106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   20 |   struct B1 (virtual base)
1116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   20 |     int a
1126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=24, align=8
113651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
11492563d0c04d9f06e528439bb93073e41ecbdc07bWarren Hunt
11592563d0c04d9f06e528439bb93073e41ecbdc07bWarren Huntint a[
11692563d0c04d9f06e528439bb93073e41ecbdc07bWarren Huntsizeof(A)+
11792563d0c04d9f06e528439bb93073e41ecbdc07bWarren Huntsizeof(B)+
11892563d0c04d9f06e528439bb93073e41ecbdc07bWarren Huntsizeof(C)+
119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(D)+
120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(E)];
121