199451b44SJordan Rupprecht #include <stdint.h> 299451b44SJordan Rupprecht 399451b44SJordan Rupprecht struct LargeBitsA { 499451b44SJordan Rupprecht unsigned int : 30, a : 20; 599451b44SJordan Rupprecht } lba; 699451b44SJordan Rupprecht 799451b44SJordan Rupprecht struct LargeBitsB { 899451b44SJordan Rupprecht unsigned int a : 1, : 11, : 12, b : 20; 999451b44SJordan Rupprecht } lbb; 1099451b44SJordan Rupprecht 1199451b44SJordan Rupprecht struct LargeBitsC { 1299451b44SJordan Rupprecht unsigned int : 13, : 9, a : 1, b : 1, c : 5, d : 1, e : 20; 1399451b44SJordan Rupprecht } lbc; 1499451b44SJordan Rupprecht 1599451b44SJordan Rupprecht struct LargeBitsD { 1699451b44SJordan Rupprecht char arr[3]; 1799451b44SJordan Rupprecht unsigned int : 30, a : 20; 1899451b44SJordan Rupprecht } lbd; 1999451b44SJordan Rupprecht 20*974c2f5eSRaphael Isemann struct BitfieldsInStructInUnion { 2199451b44SJordan Rupprecht class fields { 2299451b44SJordan Rupprecht uint64_t : 13; 2399451b44SJordan Rupprecht uint64_t : 9; 2499451b44SJordan Rupprecht 2599451b44SJordan Rupprecht uint64_t a : 1; 2699451b44SJordan Rupprecht uint64_t b : 1; 2799451b44SJordan Rupprecht uint64_t c : 1; 2899451b44SJordan Rupprecht uint64_t d : 1; 2999451b44SJordan Rupprecht uint64_t e : 1; 3099451b44SJordan Rupprecht uint64_t f : 1; 3199451b44SJordan Rupprecht uint64_t g : 1; 3299451b44SJordan Rupprecht uint64_t h : 1; 3399451b44SJordan Rupprecht uint64_t i : 1; 3499451b44SJordan Rupprecht uint64_t j : 1; 3599451b44SJordan Rupprecht uint64_t k : 1; 3699451b44SJordan Rupprecht 3799451b44SJordan Rupprecht // In order to reproduce the crash for this case we need the 3899451b44SJordan Rupprecht // members of fields to stay private :-( 39*974c2f5eSRaphael Isemann friend struct BitfieldsInStructInUnion; 4099451b44SJordan Rupprecht }; 4199451b44SJordan Rupprecht 4299451b44SJordan Rupprecht union { 4399451b44SJordan Rupprecht struct fields f; 4499451b44SJordan Rupprecht }; 4599451b44SJordan Rupprecht 46*974c2f5eSRaphael Isemann BitfieldsInStructInUnion() { 4799451b44SJordan Rupprecht f.a = 1; 4899451b44SJordan Rupprecht f.b = 0; 4999451b44SJordan Rupprecht f.c = 1; 5099451b44SJordan Rupprecht f.d = 0; 5199451b44SJordan Rupprecht f.e = 1; 5299451b44SJordan Rupprecht f.f = 0; 5399451b44SJordan Rupprecht f.g = 1; 5499451b44SJordan Rupprecht f.h = 0; 5599451b44SJordan Rupprecht f.i = 1; 5699451b44SJordan Rupprecht f.j = 0; 5799451b44SJordan Rupprecht f.k = 1; 5899451b44SJordan Rupprecht } 59*974c2f5eSRaphael Isemann } bitfields_in_struct_in_union; 6099451b44SJordan Rupprecht 61*974c2f5eSRaphael Isemann class Base { 6200c8120aSshafik public: 6300c8120aSshafik uint32_t b_a; 6400c8120aSshafik }; 6500c8120aSshafik 66*974c2f5eSRaphael Isemann class Derived : public Base { 6700c8120aSshafik public: 6800c8120aSshafik uint32_t d_a : 1; 6900c8120aSshafik } derived; 7000c8120aSshafik 71*974c2f5eSRaphael Isemann union UnionWithBitfields { 72bae9aedbSshafik unsigned int a : 8; 73bae9aedbSshafik unsigned int b : 16; 74bae9aedbSshafik unsigned int c : 32; 75bae9aedbSshafik unsigned int x; 76bae9aedbSshafik } uwbf; 77bae9aedbSshafik 78*974c2f5eSRaphael Isemann union UnionWithUnnamedBitfield { 79bae9aedbSshafik unsigned int : 16, a : 24; 80bae9aedbSshafik unsigned int x; 81bae9aedbSshafik } uwubf; 82bae9aedbSshafik 83*974c2f5eSRaphael Isemann struct BoolBits { 84*974c2f5eSRaphael Isemann bool a : 1; 85*974c2f5eSRaphael Isemann bool b : 1; 86*974c2f5eSRaphael Isemann bool c : 2; 87*974c2f5eSRaphael Isemann bool d : 2; 88*974c2f5eSRaphael Isemann }; 89*974c2f5eSRaphael Isemann 90*974c2f5eSRaphael Isemann struct WithVTable { 91*974c2f5eSRaphael Isemann virtual ~WithVTable() {} 92*974c2f5eSRaphael Isemann unsigned a : 4; 93*974c2f5eSRaphael Isemann unsigned b : 4; 94*974c2f5eSRaphael Isemann unsigned c : 4; 95*974c2f5eSRaphael Isemann }; 96*974c2f5eSRaphael Isemann WithVTable with_vtable; 97*974c2f5eSRaphael Isemann 98*974c2f5eSRaphael Isemann struct WithVTableAndUnnamed { 99*974c2f5eSRaphael Isemann virtual ~WithVTableAndUnnamed() {} 100*974c2f5eSRaphael Isemann unsigned a : 4; 101*974c2f5eSRaphael Isemann unsigned b : 4; 102*974c2f5eSRaphael Isemann unsigned c : 4; 103*974c2f5eSRaphael Isemann }; 104*974c2f5eSRaphael Isemann WithVTableAndUnnamed with_vtable_and_unnamed; 105*974c2f5eSRaphael Isemann 106*974c2f5eSRaphael Isemann struct BaseWithVTable { 107*974c2f5eSRaphael Isemann virtual ~BaseWithVTable() {} 108*974c2f5eSRaphael Isemann }; 109*974c2f5eSRaphael Isemann struct HasBaseWithVTable : BaseWithVTable { 110*974c2f5eSRaphael Isemann unsigned a : 4; 111*974c2f5eSRaphael Isemann unsigned b : 4; 112*974c2f5eSRaphael Isemann unsigned c : 4; 113*974c2f5eSRaphael Isemann }; 114*974c2f5eSRaphael Isemann HasBaseWithVTable base_with_vtable; 115*974c2f5eSRaphael Isemann 116*974c2f5eSRaphael Isemann int main(int argc, char const *argv[]) { 11799451b44SJordan Rupprecht lba.a = 2; 11899451b44SJordan Rupprecht 11999451b44SJordan Rupprecht lbb.a = 1; 12099451b44SJordan Rupprecht lbb.b = 3; 12199451b44SJordan Rupprecht 12299451b44SJordan Rupprecht lbc.a = 1; 12399451b44SJordan Rupprecht lbc.b = 0; 12499451b44SJordan Rupprecht lbc.c = 4; 12599451b44SJordan Rupprecht lbc.d = 1; 12699451b44SJordan Rupprecht lbc.e = 20; 12799451b44SJordan Rupprecht 12899451b44SJordan Rupprecht lbd.arr[0] = 'a'; 12999451b44SJordan Rupprecht lbd.arr[1] = 'b'; 13099451b44SJordan Rupprecht lbd.arr[2] = '\0'; 13199451b44SJordan Rupprecht lbd.a = 5; 13299451b44SJordan Rupprecht 13300c8120aSshafik derived.b_a = 2; 13400c8120aSshafik derived.d_a = 1; 13599451b44SJordan Rupprecht 136bae9aedbSshafik uwbf.x = 0xFFFFFFFF; 137bae9aedbSshafik uwubf.x = 0xFFFFFFFF; 138bae9aedbSshafik 139*974c2f5eSRaphael Isemann BoolBits bb; 1400bab7b26SAndy Yankovsky bb.a = 0b1; 1410bab7b26SAndy Yankovsky bb.b = 0b0; 1420bab7b26SAndy Yankovsky bb.c = 0b11; 1430bab7b26SAndy Yankovsky bb.d = 0b01; 1440bab7b26SAndy Yankovsky 145*974c2f5eSRaphael Isemann with_vtable.a = 5; 146*974c2f5eSRaphael Isemann with_vtable.b = 0; 147*974c2f5eSRaphael Isemann with_vtable.c = 5; 148*974c2f5eSRaphael Isemann 149*974c2f5eSRaphael Isemann with_vtable_and_unnamed.a = 5; 150*974c2f5eSRaphael Isemann with_vtable_and_unnamed.b = 0; 151*974c2f5eSRaphael Isemann with_vtable_and_unnamed.c = 5; 152*974c2f5eSRaphael Isemann 153*974c2f5eSRaphael Isemann base_with_vtable.a = 5; 154*974c2f5eSRaphael Isemann base_with_vtable.b = 0; 155*974c2f5eSRaphael Isemann base_with_vtable.c = 5; 156*974c2f5eSRaphael Isemann 157*974c2f5eSRaphael Isemann return 0; // break here 15899451b44SJordan Rupprecht } 159