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