diff options
| author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2017-04-06 15:00:24 +0200 |
|---|---|---|
| committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2017-05-19 05:35:01 +0200 |
| commit | 816e13f57644116daf20debe548e3e53ec4e5073 (patch) | |
| tree | f94c5702d78362b38ae492c5641a336a2f88def5 /validation/linear | |
| parent | 756f80a7153789c080695c5a1ef0a405339913b2 (diff) | |
| download | sparse-dev-816e13f57644116daf20debe548e3e53ec4e5073.tar.gz | |
add test case for linearize_initializer() of bitfields
In linearize_initializer(), 'ad->bit_size' & 'ad->bit_offset' were
never set, making the correct initialization impossible (a bit_size of
zero being especially bad, resulting in a mask of -1 instead of 0).
This is now fixed since 'bit_size' & 'bit_offset' are taken directly
from 'result_type'.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Diffstat (limited to 'validation/linear')
| -rw-r--r-- | validation/linear/bitfield-init-mask.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/validation/linear/bitfield-init-mask.c b/validation/linear/bitfield-init-mask.c new file mode 100644 index 00000000..94afa400 --- /dev/null +++ b/validation/linear/bitfield-init-mask.c @@ -0,0 +1,27 @@ +struct bfu { + unsigned int a:11; + unsigned int f:9; + unsigned int z:3; +}; + +struct bfu bfu_init_00_11(int a) +{ + struct bfu bfu = { .a = a, }; + return bfu; +} + +struct bfu bfu_init_20_23(int a) +{ + struct bfu bfu = { .z = a, }; + return bfu; +} + +/* + * check-name: bitfield initializer mask + * check-command: test-linearize -fdump-linearize=only -Wno-decl $file + * check-output-ignore + * + * check-output-contains: and\\..*fffff800\$ + * check-output-contains: shl\\..* \\$20 + * check-output-contains: and\\..*ff8fffff\$ + */ |
