bounced... again, without html.
Hi Richard,
while working on another bug in the area of -fstrict-volatile-bitfields
I became aware of another example where -fstrict-volatile-bitfields may
generate
wrong code. This is reproducible on a !STRICT_ALIGNMENT target like x86_64.
The problem is that strict_volatile_bitfield_p tries to allow more than
necessary
if !STRICT_ALIGNMENT. Everything works OK on ARM for instance.
If this function returns true, we may later call narrow_bit_field_mem, and
the check in strict_volatile_bitfield_p should mirror the logic there:
narrow_bit_field_mem just uses GET_MODE_BITSIZE (mode) and does not
care about STRICT_ALIGNMENT, and in the end *new_bitnum + bitsize may
reach beyond the end of the region. This causes store_fixed_bit_field_1
to silently fail to generate correct code.
The attached patch was boot-strapped and
regression-tested on x86_64-linux-gnu.
OK for trunk and 4.9?
Thanks
Bernd.
gcc: 2015-03-04 Bernd Edlinger <[email protected]> * expmed.c (strict_volatile_bitfield_p): Don't return different results if !STRICT_ALIGNMENT. Use GET_MODE_BITSIZE instead of GET_MODE_ALIGNMENT here. testsuite: 2015-03-04 Bernd Edlinger <[email protected]> * gcc.dg/20150304-1.c: New test.
patch-volatile-bitfields-1.diff
Description: Binary data
