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;