llvm-project
120 строк · 4.4 Кб
1// RUN: %clang_cc1 -fno-rtti -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>&1 \
2// RUN: | FileCheck %s
3// RUN: %clang_cc1 -fno-rtti -triple x86_64-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
4// RUN: | FileCheck %s -check-prefix CHECK-X64
5
6struct B0 { int a; };7struct B1 { int a; };8
9struct A : virtual B0 { char a : 1; };10
11// CHECK: *** Dumping AST Record Layout
12// CHECK: *** Dumping AST Record Layout
13// CHECK-NEXT: 0 | struct A
14// CHECK-NEXT: 0 | (A vbtable pointer)
15// CHECK-NEXT: 4:0-0 | char a
16// CHECK-NEXT: 8 | struct B0 (virtual base)
17// CHECK-NEXT: 8 | int a
18// CHECK-NEXT: | [sizeof=12, align=4
19// CHECK-NEXT: | nvsize=8, nvalign=4]
20// CHECK-X64: *** Dumping AST Record Layout
21// CHECK-X64: *** Dumping AST Record Layout
22// CHECK-X64-NEXT: 0 | struct A
23// CHECK-X64-NEXT: 0 | (A vbtable pointer)
24// CHECK-X64-NEXT: 8:0-0 | char a
25// CHECK-X64-NEXT: 16 | struct B0 (virtual base)
26// CHECK-X64-NEXT: 16 | int a
27// CHECK-X64-NEXT: | [sizeof=24, align=8
28// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
29
30struct B : virtual B0 { short a : 1; };31
32// CHECK: *** Dumping AST Record Layout
33// CHECK-NEXT: 0 | struct B
34// CHECK-NEXT: 0 | (B vbtable pointer)
35// CHECK-NEXT: 4:0-0 | short a
36// CHECK-NEXT: 8 | struct B0 (virtual base)
37// CHECK-NEXT: 8 | int a
38// CHECK-NEXT: | [sizeof=12, align=4
39// CHECK-NEXT: | nvsize=8, nvalign=4]
40// CHECK-X64: *** Dumping AST Record Layout
41// CHECK-X64-NEXT: 0 | struct B
42// CHECK-X64-NEXT: 0 | (B vbtable pointer)
43// CHECK-X64-NEXT: 8:0-0 | short a
44// CHECK-X64-NEXT: 16 | struct B0 (virtual base)
45// CHECK-X64-NEXT: 16 | int a
46// CHECK-X64-NEXT: | [sizeof=24, align=8
47// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
48
49struct C : virtual B0 { char a : 1; char : 0; };50
51// CHECK: *** Dumping AST Record Layout
52// CHECK-NEXT: 0 | struct C
53// CHECK-NEXT: 0 | (C vbtable pointer)
54// CHECK-NEXT: 4:0-0 | char a
55// CHECK-NEXT: 5:- | char
56// CHECK-NEXT: 8 | struct B0 (virtual base)
57// CHECK-NEXT: 8 | int a
58// CHECK-NEXT: | [sizeof=12, align=4
59// CHECK-NEXT: | nvsize=8, nvalign=4]
60// CHECK-X64: *** Dumping AST Record Layout
61// CHECK-X64-NEXT: 0 | struct C
62// CHECK-X64-NEXT: 0 | (C vbtable pointer)
63// CHECK-X64-NEXT: 8:0-0 | char a
64// CHECK-X64-NEXT: 9:- | char
65// CHECK-X64-NEXT: 16 | struct B0 (virtual base)
66// CHECK-X64-NEXT: 16 | int a
67// CHECK-X64-NEXT: | [sizeof=24, align=8
68// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
69
70struct D : virtual B0 { char a : 1; char b; };71
72// CHECK: *** Dumping AST Record Layout
73// CHECK-NEXT: 0 | struct D
74// CHECK-NEXT: 0 | (D vbtable pointer)
75// CHECK-NEXT: 4:0-0 | char a
76// CHECK-NEXT: 5 | char b
77// CHECK-NEXT: 8 | struct B0 (virtual base)
78// CHECK-NEXT: 8 | int a
79// CHECK-NEXT: | [sizeof=12, align=4
80// CHECK-NEXT: | nvsize=8, nvalign=4]
81// CHECK-X64: *** Dumping AST Record Layout
82// CHECK-X64-NEXT: 0 | struct D
83// CHECK-X64-NEXT: 0 | (D vbtable pointer)
84// CHECK-X64-NEXT: 8:0-0 | char a
85// CHECK-X64-NEXT: 9 | char b
86// CHECK-X64-NEXT: 16 | struct B0 (virtual base)
87// CHECK-X64-NEXT: 16 | int a
88// CHECK-X64-NEXT: | [sizeof=24, align=8
89// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
90
91struct E : virtual B0, virtual B1 { long long : 1; };92// CHECK: *** Dumping AST Record Layout
93// CHECK: *** Dumping AST Record Layout
94// CHECK-NEXT: 0 | struct E
95// CHECK-NEXT: 0 | (E vbtable pointer)
96// CHECK-NEXT: 8:0-0 | long long
97// CHECK-NEXT: 16 | struct B0 (virtual base)
98// CHECK-NEXT: 16 | int a
99// CHECK-NEXT: 20 | struct B1 (virtual base)
100// CHECK-NEXT: 20 | int a
101// CHECK-NEXT: | [sizeof=24, align=8
102// CHECK-NEXT: | nvsize=16, nvalign=8]
103// CHECK-X64: *** Dumping AST Record Layout
104// CHECK-X64: *** Dumping AST Record Layout
105// CHECK-X64-NEXT: 0 | struct E
106// CHECK-X64-NEXT: 0 | (E vbtable pointer)
107// CHECK-X64-NEXT: 8:0-0 | long long
108// CHECK-X64-NEXT: 16 | struct B0 (virtual base)
109// CHECK-X64-NEXT: 16 | int a
110// CHECK-X64-NEXT: 20 | struct B1 (virtual base)
111// CHECK-X64-NEXT: 20 | int a
112// CHECK-X64-NEXT: | [sizeof=24, align=8
113// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
114
115int a[116sizeof(A)+117sizeof(B)+118sizeof(C)+119sizeof(D)+120sizeof(E)];121