https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84121
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- int fac = 1-x, prod = 1+fac; while (fac) { printf("fac=%d\n",fac); prod *= 1 + (fac*=fac); } this loop will never exit because if fac is not zero at entry and fac *= fac will never make it zero because we can assume that overflow will not happen.