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