1#include <stdint.h>
2
3struct LargeBitsA {
4 unsigned int : 30, a : 20;
5} lba;
6
7struct LargeBitsB {
8 unsigned int a : 1, : 11, : 12, b : 20;
9} lbb;
10
11struct LargeBitsC {
12 unsigned int : 13, : 9, a : 1, b : 1, c : 5, d : 1, e : 20;
13} lbc;
14
15struct LargeBitsD {
16 char arr[3];
17 unsigned int : 30, a : 20;
18} lbd;
19
20struct BitfieldsInStructInUnion {
21 class fields {
22 uint64_t : 13;
23 uint64_t : 9;
24
25 uint64_t a : 1;
26 uint64_t b : 1;
27 uint64_t c : 1;
28 uint64_t d : 1;
29 uint64_t e : 1;
30 uint64_t f : 1;
31 uint64_t g : 1;
32 uint64_t h : 1;
33 uint64_t i : 1;
34 uint64_t j : 1;
35 uint64_t k : 1;
36
37 // In order to reproduce the crash for this case we need the
38 // members of fields to stay private :-(
39 friend struct BitfieldsInStructInUnion;
40 };
41
42 union {
43 struct fields f;
44 };
45
46 BitfieldsInStructInUnion() {
47 f.a = 1;
48 f.b = 0;
49 f.c = 1;
50 f.d = 0;
51 f.e = 1;
52 f.f = 0;
53 f.g = 1;
54 f.h = 0;
55 f.i = 1;
56 f.j = 0;
57 f.k = 1;
58 }
59} bitfields_in_struct_in_union;
60
61class Base {
62public:
63 uint32_t b_a;
64};
65
66class Derived : public Base {
67public:
68 uint32_t d_a : 1;
69} derived;
70
71union UnionWithBitfields {
72 unsigned int a : 8;
73 unsigned int b : 16;
74 unsigned int c : 32;
75 unsigned int x;
76} uwbf;
77
78union UnionWithUnnamedBitfield {
79 unsigned int : 16, a : 24;
80 unsigned int x;
81} uwubf;
82
83struct BoolBits {
84 bool a : 1;
85 bool b : 1;
86 bool c : 2;
87 bool d : 2;
88};
89
90struct WithVTable {
91 virtual ~WithVTable() {}
92 unsigned a : 4;
93 unsigned b : 4;
94 unsigned c : 4;
95};
96WithVTable with_vtable;
97
98struct WithVTableAndUnnamed {
99 virtual ~WithVTableAndUnnamed() {}
100 unsigned : 4;
101 unsigned b : 4;
102 unsigned c : 4;
103};
104WithVTableAndUnnamed with_vtable_and_unnamed;
105
106struct BaseWithVTable {
107 virtual ~BaseWithVTable() {}
108};
109struct HasBaseWithVTable : BaseWithVTable {
110 unsigned a : 4;
111 unsigned b : 4;
112 unsigned c : 4;
113};
114HasBaseWithVTable base_with_vtable;
115
116struct DerivedWithVTable : public Base {
117 virtual ~DerivedWithVTable() {}
118 unsigned a : 1;
119};
120DerivedWithVTable derived_with_vtable;
121
122int main(int argc, char const *argv[]) {
123 lba.a = 2;
124
125 lbb.a = 1;
126 lbb.b = 3;
127
128 lbc.a = 1;
129 lbc.b = 0;
130 lbc.c = 4;
131 lbc.d = 1;
132 lbc.e = 20;
133
134 lbd.arr[0] = 'a';
135 lbd.arr[1] = 'b';
136 lbd.arr[2] = '\0';
137 lbd.a = 5;
138
139 derived.b_a = 2;
140 derived.d_a = 1;
141
142 uwbf.x = 0xFFFFFFFF;
143 uwubf.x = 0xFFFFFFFF;
144
145 BoolBits bb;
146 bb.a = 0b1;
147 bb.b = 0b0;
148 bb.c = 0b11;
149 bb.d = 0b01;
150
151 with_vtable.a = 5;
152 with_vtable.b = 0;
153 with_vtable.c = 5;
154
155 with_vtable_and_unnamed.b = 0;
156 with_vtable_and_unnamed.c = 5;
157
158 base_with_vtable.a = 5;
159 base_with_vtable.b = 0;
160 base_with_vtable.c = 5;
161
162 derived_with_vtable.b_a = 2;
163 derived_with_vtable.a = 1;
164
165 return 0; // break here
166}
167

source code of lldb/test/API/lang/cpp/bitfields/main.cpp