https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85598
--- Comment #2 from Martin Sebor <msebor at gcc dot gnu.org> --- The problem is that the warning pass sees x as having the range of [0, 256] rather than [0, 255]. The incorrect range can also be seen in EVRP. There is no warning at -O1 because the range determined at that level is that of unsigned int which is considered to be the same as unknown. The warning does not trigger for such ranges.