https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109008
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- So it boils down to us optimizing d = 1. + eps; if (d == 1.) return eps; to return 0. which is of course wrong. double eps_or_zero (double eps) { double d = 1. + eps; if (d == 1.) return eps; return 0.0; }