https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110131
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2023-06-05 Ever confirmed|0 |1 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- _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. Confirmed.