1*99451b44SJordan Rupprecht #include <stdint.h> 2*99451b44SJordan Rupprecht 3*99451b44SJordan Rupprecht int main(int argc, char const *argv[]) { 4*99451b44SJordan Rupprecht struct LargeBitsA { 5*99451b44SJordan Rupprecht unsigned int : 30, a : 20; 6*99451b44SJordan Rupprecht } lba; 7*99451b44SJordan Rupprecht 8*99451b44SJordan Rupprecht struct LargeBitsB { 9*99451b44SJordan Rupprecht unsigned int a : 1, : 11, : 12, b : 20; 10*99451b44SJordan Rupprecht } lbb; 11*99451b44SJordan Rupprecht 12*99451b44SJordan Rupprecht struct LargeBitsC { 13*99451b44SJordan Rupprecht unsigned int : 13, : 9, a : 1, b : 1, c : 5, d : 1, e : 20; 14*99451b44SJordan Rupprecht } lbc; 15*99451b44SJordan Rupprecht 16*99451b44SJordan Rupprecht struct LargeBitsD { 17*99451b44SJordan Rupprecht char arr[3]; 18*99451b44SJordan Rupprecht unsigned int : 30, a : 20; 19*99451b44SJordan Rupprecht } lbd; 20*99451b44SJordan Rupprecht 21*99451b44SJordan Rupprecht // This case came up when debugging clang and models RecordDeclBits 22*99451b44SJordan Rupprecht struct BitExampleFromClangDeclContext { 23*99451b44SJordan Rupprecht class fields { 24*99451b44SJordan Rupprecht uint64_t : 13; 25*99451b44SJordan Rupprecht uint64_t : 9; 26*99451b44SJordan Rupprecht 27*99451b44SJordan Rupprecht uint64_t a: 1; 28*99451b44SJordan Rupprecht uint64_t b: 1; 29*99451b44SJordan Rupprecht uint64_t c: 1; 30*99451b44SJordan Rupprecht uint64_t d: 1; 31*99451b44SJordan Rupprecht uint64_t e: 1; 32*99451b44SJordan Rupprecht uint64_t f: 1; 33*99451b44SJordan Rupprecht uint64_t g: 1; 34*99451b44SJordan Rupprecht uint64_t h: 1; 35*99451b44SJordan Rupprecht uint64_t i: 1; 36*99451b44SJordan Rupprecht uint64_t j: 1; 37*99451b44SJordan Rupprecht uint64_t k: 1; 38*99451b44SJordan Rupprecht 39*99451b44SJordan Rupprecht // In order to reproduce the crash for this case we need the 40*99451b44SJordan Rupprecht // members of fields to stay private :-( 41*99451b44SJordan Rupprecht friend struct BitExampleFromClangDeclContext; 42*99451b44SJordan Rupprecht }; 43*99451b44SJordan Rupprecht 44*99451b44SJordan Rupprecht union { 45*99451b44SJordan Rupprecht struct fields f; 46*99451b44SJordan Rupprecht }; 47*99451b44SJordan Rupprecht 48*99451b44SJordan Rupprecht BitExampleFromClangDeclContext() { 49*99451b44SJordan Rupprecht f.a = 1; 50*99451b44SJordan Rupprecht f.b = 0; 51*99451b44SJordan Rupprecht f.c = 1; 52*99451b44SJordan Rupprecht f.d = 0; 53*99451b44SJordan Rupprecht f.e = 1; 54*99451b44SJordan Rupprecht f.f = 0; 55*99451b44SJordan Rupprecht f.g = 1; 56*99451b44SJordan Rupprecht f.h = 0; 57*99451b44SJordan Rupprecht f.i = 1; 58*99451b44SJordan Rupprecht f.j = 0; 59*99451b44SJordan Rupprecht f.k = 1; 60*99451b44SJordan Rupprecht } 61*99451b44SJordan Rupprecht } clang_example; 62*99451b44SJordan Rupprecht 63*99451b44SJordan Rupprecht lba.a = 2; 64*99451b44SJordan Rupprecht 65*99451b44SJordan Rupprecht lbb.a = 1; 66*99451b44SJordan Rupprecht lbb.b = 3; 67*99451b44SJordan Rupprecht 68*99451b44SJordan Rupprecht lbc.a = 1; 69*99451b44SJordan Rupprecht lbc.b = 0; 70*99451b44SJordan Rupprecht lbc.c = 4; 71*99451b44SJordan Rupprecht lbc.d = 1; 72*99451b44SJordan Rupprecht lbc.e = 20; 73*99451b44SJordan Rupprecht 74*99451b44SJordan Rupprecht lbd.arr[0] = 'a'; 75*99451b44SJordan Rupprecht lbd.arr[1] = 'b'; 76*99451b44SJordan Rupprecht lbd.arr[2] = '\0'; 77*99451b44SJordan Rupprecht lbd.a = 5; 78*99451b44SJordan Rupprecht 79*99451b44SJordan Rupprecht 80*99451b44SJordan Rupprecht return 0; // Set break point at this line. 81*99451b44SJordan Rupprecht } 82