xref: /llvm-project/lldb/test/API/lang/c/bitfields/main.c (revision 025f6ca7c469b6412b58b69fab17092548d5f6c1)
1 #include <stdint.h>
2 
3 struct Bits {
4   uint32_t    : 1;
5   uint32_t    b1 : 1;
6   uint32_t    b2 : 2;
7   uint32_t    : 2;
8   uint32_t    b3 : 3;
9   // Unnamed bitfield (this will get removed).
10   uint32_t    : 2;
11   uint32_t    b4 __attribute__ ((aligned(16)));
12   uint32_t    b5 : 5;
13   uint32_t    b6 : 6;
14   uint32_t    b7 : 7;
15   uint32_t    four : 4;
16 };
17 
18 struct MoreBits {
19   uint32_t a : 3;
20   uint8_t : 1;
21   uint8_t b : 1;
22   uint8_t c : 1;
23   uint8_t d : 1;
24 };
25 struct MoreBits more_bits;
26 
27 struct ManySingleBits {
28   uint16_t b1 : 1, b2 : 1, b3 : 1, b4 : 1, b5 : 1, b6 : 1, b7 : 1, b8 : 1,
29       b9 : 1, b10 : 1, b11 : 1, b12 : 1, b13 : 1, b14 : 1, b15 : 1, b16 : 1,
30       b17 : 1;
31 };
32 struct ManySingleBits many_single_bits;
33 
34 struct LargePackedBits {
35   uint64_t a : 36;
36   uint64_t b : 36;
37 } __attribute__((packed));
38 
39 #pragma pack(1)
40 struct PackedBits {
41   char a;
42   uint32_t b : 5, c : 27;
43 };
44 #pragma pack()
45 
main(int argc,char const * argv[])46 int main(int argc, char const *argv[]) {
47   struct Bits bits;
48   bits.b1 = 1;
49   bits.b2 = 3;
50   bits.b3 = 7;
51   bits.b4 = 15;
52   bits.b5 = 31;
53   bits.b6 = 63;
54   bits.b7 = 127;
55   bits.four = 15;
56 
57   more_bits.a = 3;
58   more_bits.b = 0;
59   more_bits.c = 1;
60   more_bits.d = 0;
61 
62   many_single_bits.b1 = 1;
63   many_single_bits.b5 = 1;
64   many_single_bits.b7 = 1;
65   many_single_bits.b13 = 1;
66 
67   struct PackedBits packed;
68   packed.a = 'a';
69   packed.b = 10;
70   packed.c = 0x7112233;
71 
72   struct LargePackedBits large_packed =
73       (struct LargePackedBits){0xcbbbbaaaa, 0xdffffeeee};
74   struct LargePackedBits *large_packed_ptr = &large_packed;
75 
76   return 0; // break here
77 }
78