https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66678
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- So in GCC 12+ after evrp # RANGE [0, 4294967294] NONZERO 4294967295 _1 = (long unsigned intD.16) i_9; # RANGE [0, 17179869176] NONZERO 17179869180 _2 = _1 * 4; ... # RANGE [1, 4294967295] i_17 = i_9 + 1; So maybe this has been fix ...