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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |aldyh at gcc dot gnu.org

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---

i_1 = ASSERT_EXPR <i_7, i_7 != POLY_INT_CST [2, 2]>;
Intersecting
  int [-INF, 1]  EQUIVALENCES: { i_7 } (1 elements)

so somehow we derive from i_7 != POLY_INT_CST [2, 2] that i_7 must
be [-INF, 1] - that looks wrong?

This goes via extract_range_for_var_from_comparison_expr and likely
compare_values goes off in

      if (limit_vr
          && limit_vr->kind () == VR_RANGE
          && compare_values (limit_vr->min (), limit_vr->max ()) == 0)
        {
          min = limit_vr->min ();
          max = limit_vr->max ();
        }

where min/max are then POLY_INT_CST [2, 2] and the anti-range we build
from that is canonicalized in odd ways.

I think VRP all over the place assumes integer typed constants are
INTEGER_CSTs so maybe sth else is off with POLY_INT_CSTs ...

CCing VRP people.

Reply via email to