gimple-fold: Handle bitfields in fold_const_aggregate_ref_1 [PR93121]
authorJakub Jelinek <jakub@redhat.com>
Mon, 20 Jul 2020 08:24:19 +0000 (10:24 +0200)
committerJakub Jelinek <jakub@redhat.com>
Mon, 20 Jul 2020 08:24:19 +0000 (10:24 +0200)
commite4f1cbc35b1e823a0a6e58eeca61c8c6ca351875
treebaee51a3e02e958107cd446bb1587507df747e58
parent83b171655dc0785262a444f5d5c2be7195977987
gimple-fold: Handle bitfields in fold_const_aggregate_ref_1 [PR93121]

When working on __builtin_bit_cast that needs to handle bitfields too,
I've made the following change to handle at least some bitfields in
fold_const_aggregate_ref_1 (those that have integral representative).
It already handles some, but only those that start and end at byte
boundaries.

2020-07-20  Jakub Jelinek  <jakub@redhat.com>

PR libstdc++/93121
* gimple-fold.c (fold_const_aggregate_ref_1): For COMPONENT_REF
of a bitfield not aligned on byte boundaries try to
fold_ctor_reference DECL_BIT_FIELD_REPRESENTATIVE if any and
adjust it depending on endianity.

* gcc.dg/tree-ssa/pr93121-2.c: New test.
gcc/gimple-fold.c
gcc/testsuite/gcc.dg/tree-ssa/pr93121-2.c [new file with mode: 0644]