199451b44SJordan Rupprecht #include <stdint.h> 299451b44SJordan Rupprecht 399451b44SJordan Rupprecht int main(int argc, char const *argv[]) { 499451b44SJordan Rupprecht struct LargeBitsA { 599451b44SJordan Rupprecht unsigned int : 30, a : 20; 699451b44SJordan Rupprecht } lba; 799451b44SJordan Rupprecht 899451b44SJordan Rupprecht struct LargeBitsB { 999451b44SJordan Rupprecht unsigned int a : 1, : 11, : 12, b : 20; 1099451b44SJordan Rupprecht } lbb; 1199451b44SJordan Rupprecht 1299451b44SJordan Rupprecht struct LargeBitsC { 1399451b44SJordan Rupprecht unsigned int : 13, : 9, a : 1, b : 1, c : 5, d : 1, e : 20; 1499451b44SJordan Rupprecht } lbc; 1599451b44SJordan Rupprecht 1699451b44SJordan Rupprecht struct LargeBitsD { 1799451b44SJordan Rupprecht char arr[3]; 1899451b44SJordan Rupprecht unsigned int : 30, a : 20; 1999451b44SJordan Rupprecht } lbd; 2099451b44SJordan Rupprecht 2199451b44SJordan Rupprecht // This case came up when debugging clang and models RecordDeclBits 2299451b44SJordan Rupprecht struct BitExampleFromClangDeclContext { 2399451b44SJordan Rupprecht class fields { 2499451b44SJordan Rupprecht uint64_t : 13; 2599451b44SJordan Rupprecht uint64_t : 9; 2699451b44SJordan Rupprecht 2799451b44SJordan Rupprecht uint64_t a: 1; 2899451b44SJordan Rupprecht uint64_t b: 1; 2999451b44SJordan Rupprecht uint64_t c: 1; 3099451b44SJordan Rupprecht uint64_t d: 1; 3199451b44SJordan Rupprecht uint64_t e: 1; 3299451b44SJordan Rupprecht uint64_t f: 1; 3399451b44SJordan Rupprecht uint64_t g: 1; 3499451b44SJordan Rupprecht uint64_t h: 1; 3599451b44SJordan Rupprecht uint64_t i: 1; 3699451b44SJordan Rupprecht uint64_t j: 1; 3799451b44SJordan Rupprecht uint64_t k: 1; 3899451b44SJordan Rupprecht 3999451b44SJordan Rupprecht // In order to reproduce the crash for this case we need the 4099451b44SJordan Rupprecht // members of fields to stay private :-( 4199451b44SJordan Rupprecht friend struct BitExampleFromClangDeclContext; 4299451b44SJordan Rupprecht }; 4399451b44SJordan Rupprecht 4499451b44SJordan Rupprecht union { 4599451b44SJordan Rupprecht struct fields f; 4699451b44SJordan Rupprecht }; 4799451b44SJordan Rupprecht 4899451b44SJordan Rupprecht BitExampleFromClangDeclContext() { 4999451b44SJordan Rupprecht f.a = 1; 5099451b44SJordan Rupprecht f.b = 0; 5199451b44SJordan Rupprecht f.c = 1; 5299451b44SJordan Rupprecht f.d = 0; 5399451b44SJordan Rupprecht f.e = 1; 5499451b44SJordan Rupprecht f.f = 0; 5599451b44SJordan Rupprecht f.g = 1; 5699451b44SJordan Rupprecht f.h = 0; 5799451b44SJordan Rupprecht f.i = 1; 5899451b44SJordan Rupprecht f.j = 0; 5999451b44SJordan Rupprecht f.k = 1; 6099451b44SJordan Rupprecht } 6199451b44SJordan Rupprecht } clang_example; 6299451b44SJordan Rupprecht 6300c8120aSshafik class B { 6400c8120aSshafik public: 6500c8120aSshafik uint32_t b_a; 6600c8120aSshafik }; 6700c8120aSshafik 6800c8120aSshafik class D : public B { 6900c8120aSshafik public: 7000c8120aSshafik uint32_t d_a : 1; 7100c8120aSshafik } derived; 7200c8120aSshafik 73*bae9aedbSshafik union union_with_bitfields { 74*bae9aedbSshafik unsigned int a : 8; 75*bae9aedbSshafik unsigned int b : 16; 76*bae9aedbSshafik unsigned int c : 32; 77*bae9aedbSshafik unsigned int x; 78*bae9aedbSshafik } uwbf; 79*bae9aedbSshafik 80*bae9aedbSshafik union union_with_unnamed_bitfield { 81*bae9aedbSshafik unsigned int : 16, a : 24; 82*bae9aedbSshafik unsigned int x; 83*bae9aedbSshafik } uwubf; 84*bae9aedbSshafik 8599451b44SJordan Rupprecht lba.a = 2; 8699451b44SJordan Rupprecht 8799451b44SJordan Rupprecht lbb.a = 1; 8899451b44SJordan Rupprecht lbb.b = 3; 8999451b44SJordan Rupprecht 9099451b44SJordan Rupprecht lbc.a = 1; 9199451b44SJordan Rupprecht lbc.b = 0; 9299451b44SJordan Rupprecht lbc.c = 4; 9399451b44SJordan Rupprecht lbc.d = 1; 9499451b44SJordan Rupprecht lbc.e = 20; 9599451b44SJordan Rupprecht 9699451b44SJordan Rupprecht lbd.arr[0] = 'a'; 9799451b44SJordan Rupprecht lbd.arr[1] = 'b'; 9899451b44SJordan Rupprecht lbd.arr[2] = '\0'; 9999451b44SJordan Rupprecht lbd.a = 5; 10099451b44SJordan Rupprecht 10100c8120aSshafik derived.b_a = 2; 10200c8120aSshafik derived.d_a = 1; 10399451b44SJordan Rupprecht 104*bae9aedbSshafik uwbf.x = 0xFFFFFFFF; 105*bae9aedbSshafik uwubf.x = 0xFFFFFFFF; 106*bae9aedbSshafik 10799451b44SJordan Rupprecht return 0; // Set break point at this line. 10899451b44SJordan Rupprecht } 109