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

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
We have:
(gdb) p debug (lhs_vr)
int [s4_11(D), s4_11(D) + 2]$3 = void
(gdb) p debug (vr_result)
int [s4_11(D), s4_11(D) + 32767]$4 = void
(gdb) p cmp_min
$5 = 0
(gdb) p cmp_max
$6 = -1
and the
      /* If the new minimum is larger than the previous one
         retain the old value.  If the new minimum value is smaller
         than the previous one and not -INF go all the way to -INF + 1.
         In the first case, to avoid infinite bouncing between different
         minimums, and in the other case to avoid iterating millions of
         times to reach -INF.  Going to -INF + 1 also lets the following
         iteration compute whether there will be any overflow, at the
         expense of one additional iteration.  */
code isn't prepared for cmp_min > 0 or cmp_max < 0 to have vr_result->min () or
vr_result->max () of the form [-]sym + cst.

Reply via email to