https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120701

Andrew Macleod <amacleod at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED

--- Comment #4 from Andrew Macleod <amacleod at redhat dot com> ---
During operator_mult::fold_range, the result of the operation is

[irange] int [-INF, -INF][1101344938, 1101344938][+INF, +INF]
and it determines the resulting bitmask should also be

MASK 0xfffffffe VALUE 0x0

When update_bitmask () is called, the bound snapping routine was suppose to be
checking for overflows and underflows, and removing the ranges if that happens.
 Unfortunately the way I was checking did not work. 

The new patch is in testing and corrects this oversight.  The [+INF, +INF] will
be correctly removed instead of being replaced with nonsense.

It was tricky to figure out exactly where it was happening because it turns out
that verify_range () only checks that each suubrange pair has a lower bound
that is lower than the upper bound of the pair.   It does NOT check if the
current pair lower bound is greater than the previous pair upper bound.  THus
the failure wasnt detected until mich furtehr in the pipeline when a vale weas
loaded from storage.  

I have added that check to verify_range as well, and tested that this test case
would have trapped in exactly the correct spot as the bad range was created.

Patch is undergoing bootstrap/regression testing now

Reply via email to