[Bug tree-optimization/52979] [4.7/4.8 Regression] likely wrong code bug w/packed bitfields
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Apr 24 12:29:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52979
--- Comment #7 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-04-24 12:28:24 UTC ---
Btw, get_best_mode for
Breakpoint 6, get_best_mode (bitsize=6, bitpos=31, bitregion_start=0,
bitregion_end=39, align=128, largest_mode=DImode, volatilep=0)
happily returns DImode which has more than maxbits (40) bits of size.
I think the C++ memory model work was not sufficiently completed to
handle this case during expansion.
At least
/* Find the narrowest integer mode that contains the bit field. */
for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode;
mode = GET_MODE_WIDER_MODE (mode))
{
unit = GET_MODE_BITSIZE (mode);
if (unit == GET_MODE_PRECISION (mode)
&& (bitpos % unit) + bitsize <= unit)
break;
}
is overly pessimistic in the (bitpos % unit) + bitsize <= unit check and
does not consider bitpos adjustments.
More information about the Gcc-bugs
mailing list