// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) /* * BTF-to-C dumper tests for bitfield. * * Copyright (c) 2019 Facebook */ #include <stdbool.h> /* ----- START-EXPECTED-OUTPUT ----- */ /* *struct bitfields_only_mixed_types { * int a: 3; * long b: 2; * _Bool c: 1; * enum { * A = 0, * B = 1, * } d: 1; * short e: 5; * int: 20; * unsigned int f: 30; *}; * */ /* ------ END-EXPECTED-OUTPUT ------ */ struct bitfields_only_mixed_types { int a: 3; long b: 2; bool c: 1; /* it's really a _Bool type */ enum { A, /* A = 0, dumper is very explicit */ B, /* B = 1, same */ } d: 1; short e: 5; /* 20-bit padding here */ unsigned f: 30; /* this gets aligned on 4-byte boundary */ }; /* ----- START-EXPECTED-OUTPUT ----- */ /* *struct bitfield_mixed_with_others { * char: 4; * int a: 4; * short b; * long c; * long d: 8; * int e; * int f; *}; * */ /* ------ END-EXPECTED-OUTPUT ------ */ struct bitfield_mixed_with_others { char: 4; /* char is enough as a backing field */ int a: 4; /* 8-bit implicit padding */ short b; /* combined with previous bitfield */ /* 4 more bytes of implicit padding */ long c; long d: 8; /* 24 bits implicit padding */ int e; /* combined with previous bitfield */ int f; /* 4 bytes of padding */ }; /* ----- START-EXPECTED-OUTPUT ----- */ /* *struct bitfield_flushed { * int a: 4; * long: 60; * long b: 16; *}; * */ /* ------ END-EXPECTED-OUTPUT ------ */ struct bitfield_flushed { int a: 4; long: 0; /* flush until next natural alignment boundary */ long b: 16; }; int f(struct { struct bitfields_only_mixed_types _1; struct bitfield_mixed_with_others _2; struct bitfield_flushed _3; } *_) { return 0; }