https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70731
--- Comment #1 from Marc Glisse <glisse at gcc dot gnu.org> --- That... seems dangerous to me. With floats, unsafe operations tend to change the low bits. With integers, an overflow gets the high bits wrong. If you call test(INT_MAX,0,1,0) for instance, the result would be quite different between the 2 functions...