llvm-project

Форк
0
/
ms-x86-bitfields-vbases.cpp 
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

6
struct B0 { int a; };
7
struct B1 { int a; };
8

9
struct 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

30
struct 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

49
struct 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

70
struct 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

91
struct 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

115
int a[
116
sizeof(A)+
117
sizeof(B)+
118
sizeof(C)+
119
sizeof(D)+
120
sizeof(E)];
121

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.