https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71031
--- Comment #12 from Marek Polacek <mpolacek at gcc dot gnu.org> --- I'm testing this then: --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -2525,14 +2525,19 @@ extract_range_from_binary_expr_1 (value_range *vr, set_value_range_to_varying (vr); return; } + else if ((min_ovf == 1 && max_ovf == 0) + || (min_ovf == 0 && max_ovf == -1)) + { + /* Min overflow or max underflow., drop to VR_VARYING. */ + set_value_range_to_varying (vr); + return; + } else { /* Min underflow or max overflow. The range kind changes to VR_ANTI_RANGE. */ bool covers = false; wide_int tem = tmin; - gcc_assert ((min_ovf == -1 && max_ovf == 0) - || (max_ovf == 1 && min_ovf == 0)); type = VR_ANTI_RANGE; tmin = tmax + 1; if (wi::cmp (tmin, tmax, sgn) < 0)