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

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #1)
> ```
>   _16 = (unsigned int) a.0_1;
>   if (_16 <= 4294967261)
>     goto <bb 5>; [50.00%]
>   else
>     goto <bb 3>; [50.00%]
> 
>   <bb 3> [local count: 536870912]:
>   _19 = _16 + 34;
>   _20 = (int) _19;
>   _25 = -16374563074 >> _20;
> ```
> That is definitely undefined.

because 4294967261 is -35. so the range _19 is [0, 33] . and in this the only
defined ranges is `[0, 31]`.  In the case where we get the wrong answer is 33.


  # RANGE [irange] unsigned int [0, 33]
  _19 = _16 + 34;

Reply via email to