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

--- Comment #8 from Andrew Macleod <amacleod at redhat dot com> ---
(In reply to David Binderman from comment #6)
> I get something similar with this test case:
> 
> int a;
> void b() {
>   if (a >= 2147483647)
>     c(a + 1);
> }

This one is slightly different.

Still triggering in the same place, but the difference in the singleton is the
result of the calculation of:

   [+INF, +INF] + 1

EVRP is reporting  [-INF, -INF], and range-ops is calculating  [+INF, +INF]

Is there a correct answer, or does it matter?   

The code we imported for handling overflow always sets the bound to +INF if an
overflow happens, and it happens on both bounds, so we get  [+INF, +INF].  I'm
guessing because its a single value EVRP actually folded the value regardless
of overflow?   

Or maybe it should be  UNDEFINED? 

Andrew

Reply via email to