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

--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> ---
So the issue is we cannot decide between

 [ (] ) and [ ( ) ]

and the check for [ (] ) elides the "redundant" check for the upper
bound relation.  But the check isn't redundant in case the compare
cannot be decided.

So the simplest fix to the legacy code is to instantiate those
not redundant checks which then results in the "expected"

Intersecting
  int [-INF, minus_1_3(D) + 2]  EQUIVALENCES: { x_6(D) } (1 elements)
and
  int ~[-2147483647, -2147483646]  EQUIVALENCES: { x_6(D) } (1 elements)
to
  int [-INF, minus_1_3(D) + 2]  EQUIVALENCES: { x_6(D) } (1 elements)

(if we can't do anything fancy, intersection simply chooses the first
range as result)

Reply via email to