stor-layout.c (bit_field_mode_iterator::next_mode): Fix signedness.
gcc/ * stor-layout.c (bit_field_mode_iterator::next_mode): Fix signedness. From-SVN: r193680
This commit is contained in:
parent
341e19df23
commit
ec593a8fc3
|
@ -1,3 +1,7 @@
|
|||
2012-11-20 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* stor-layout.c (bit_field_mode_iterator::next_mode): Fix signedness.
|
||||
|
||||
2012-11-20 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR rtl-optimization/55396
|
||||
|
|
|
@ -2670,10 +2670,6 @@ bit_field_mode_iterator::next_mode (enum machine_mode *out_mode)
|
|||
if (unit != GET_MODE_PRECISION (mode_))
|
||||
continue;
|
||||
|
||||
/* Skip modes that are too small. */
|
||||
if ((bitpos_ % unit) + bitsize_ > unit)
|
||||
continue;
|
||||
|
||||
/* Stop if the mode is too wide to handle efficiently. */
|
||||
if (unit > MAX_FIXED_MODE_SIZE)
|
||||
break;
|
||||
|
@ -2683,11 +2679,18 @@ bit_field_mode_iterator::next_mode (enum machine_mode *out_mode)
|
|||
if (count_ > 0 && unit > BITS_PER_WORD)
|
||||
break;
|
||||
|
||||
/* Skip modes that are too small. */
|
||||
unsigned HOST_WIDE_INT substart = (unsigned HOST_WIDE_INT) bitpos_ % unit;
|
||||
unsigned HOST_WIDE_INT subend = substart + bitsize_;
|
||||
if (subend > unit)
|
||||
continue;
|
||||
|
||||
/* Stop if the mode goes outside the bitregion. */
|
||||
HOST_WIDE_INT start = bitpos_ - (bitpos_ % unit);
|
||||
HOST_WIDE_INT start = bitpos_ - substart;
|
||||
if (bitregion_start_ && start < bitregion_start_)
|
||||
break;
|
||||
if (start + unit > bitregion_end_ + 1)
|
||||
HOST_WIDE_INT end = start + unit;
|
||||
if (end > bitregion_end_ + 1)
|
||||
break;
|
||||
|
||||
/* Stop if the mode requires too much alignment. */
|
||||
|
|
Loading…
Reference in New Issue