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