93 lines · c
1// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)2 3/*4 * BTF-to-C dumper tests for bitfield.5 *6 * Copyright (c) 2019 Facebook7 */8#include <stdbool.h>9 10/* ----- START-EXPECTED-OUTPUT ----- */11/*12 *struct bitfields_only_mixed_types {13 * int a: 3;14 * long b: 2;15 * _Bool c: 1;16 * enum {17 * A = 0,18 * B = 1,19 * } d: 1;20 * short e: 5;21 * int: 20;22 * unsigned int f: 30;23 *};24 *25 */26/* ------ END-EXPECTED-OUTPUT ------ */27 28struct bitfields_only_mixed_types {29 int a: 3;30 long b: 2;31 bool c: 1; /* it's really a _Bool type */32 enum {33 A, /* A = 0, dumper is very explicit */34 B, /* B = 1, same */35 } d: 1;36 short e: 5;37 /* 20-bit padding here */38 unsigned f: 30; /* this gets aligned on 4-byte boundary */39};40 41/* ----- START-EXPECTED-OUTPUT ----- */42/*43 *struct bitfield_mixed_with_others {44 * char: 4;45 * int a: 4;46 * short b;47 * long c;48 * long d: 8;49 * int e;50 * int f;51 *};52 *53 */54/* ------ END-EXPECTED-OUTPUT ------ */55struct bitfield_mixed_with_others {56 char: 4; /* char is enough as a backing field */57 int a: 4;58 /* 8-bit implicit padding */59 short b; /* combined with previous bitfield */60 /* 4 more bytes of implicit padding */61 long c;62 long d: 8;63 /* 24 bits implicit padding */64 int e; /* combined with previous bitfield */65 int f;66 /* 4 bytes of padding */67};68 69/* ----- START-EXPECTED-OUTPUT ----- */70/*71 *struct bitfield_flushed {72 * int a: 4;73 * long: 60;74 * long b: 16;75 *};76 *77 */78/* ------ END-EXPECTED-OUTPUT ------ */79struct bitfield_flushed {80 int a: 4;81 long: 0; /* flush until next natural alignment boundary */82 long b: 16;83};84 85int f(struct {86 struct bitfields_only_mixed_types _1;87 struct bitfield_mixed_with_others _2;88 struct bitfield_flushed _3;89} *_)90{91 return 0;92}93