http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46374
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> 2010-11-08 15:41:30 UTC --- That code is really: bool f (uint16_t x, uint16_t y) { return ((int)x) + 8 == ((int)y) - 17; } --- CUT --- There should be no zero extends in that code because the ABI requires them to be zero extended already. If there is then that is the bug and really a nooverflow attribute is not required there.