fold-const: Don't access bit fields with too big mode (PR71310)
authorSegher Boessenkool <segher@kernel.crashing.org>
Fri, 10 Jun 2016 23:58:09 +0000 (01:58 +0200)
committerSegher Boessenkool <segher@gcc.gnu.org>
Fri, 10 Jun 2016 23:58:09 +0000 (01:58 +0200)
commit95c18dd0464e8937a7caab76db490597b760c0d4
treee9c9e6e1494685866afc1d207592584d01abe70d
parentb97d37b42373ed291766a929a7dbcadf8af09884
fold-const: Don't access bit fields with too big mode (PR71310)

Currently, optimize_bit_field_compare reads the bitfield in word_mode
if it can.  If the bit field is normally accessed in a smaller mode,
this might be a violation of the memory model, although the "extra"
part of the read is not used.  But also, previous stores to the bit
field will have been done in the smaller mode, and then bigger loads
from it cause a LHS problem.

PR middle-end/71310
* fold-const.c (optimize_bit_field_compare): Don't try to use
word_mode unconditionally for reading the bit field, look at
DECL_BIT_FIELD_REPRESENTATIVE instead.

gcc/testsuite/
PR middle-end/71310
* gcc.target/powerpc/pr71310.c: New testcase.

From-SVN: r237319
gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/pr71310.c [new file with mode: 0644]