http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59747
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Marek Polacek from comment #2) > I think the problem is in setting the value of e. With -O in .gimple we > have: > e.2 = e; > e.3 = e.2; > e.4 = e.3 + -1; > e = e.4; > while with -O2: > e.2 = e; > e.3 = e.2; > e.4 = (unsigned short) e.3; > D.1762 = e.4 + 65535; > e.5 = (short int) D.1762; > e = e.5; That's -fstrict-overflows effect I think, but not the issue. "Fixed" by -fno-ree.