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

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #1)
>   _33 = (intD.6) _13;
>   # RANGE [irange] unsigned int [2, 32767][4294934528, +INF]
>   _29 = (unsigned int) _13;
>   # RANGE [irange] unsigned int [0, 0][3, 32768][4294934529, +INF]
>   _37 = _29 + 1;
>   _21 = _37 <= 2;
>   # RANGE [irange] int [-32768, 0][2, 32767]
>   _34 = _21 ? _33 : 0;
>   if (_34 != 5)
> 
> First:
> _t = _33 != 5
> _t1 = _21 & _t
> if (_t1 != 0)
> 
> Second:
> _21 = _37 == 0 (because that is the only value that is less than or equal to
> 2 it could be)
> 
> So:
> _21 = _29 == UINT_MAX
> or:
> _21 = _33 == -1
> 
> But since _33 != 5
> 
> so _t1 is 0.


Actually I got this wrong.
It should just be _33 == -1 here. But that can't be true as _33's range should
not include -1.

Reply via email to