https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93806
--- Comment #28 from Vincent Lefèvre <vincent-gcc at vinc17 dot net> --- A slightly modified version of the example, showing the issue with GCC 5 to 7 (as the noipa attribute directive has been added in GCC 8): #include <stdio.h> int main (void) { volatile double d = 5000000000.0; double x = d; int i = x; printf ("%d\n", i); if (x == 5000000000.0) printf ("%d\n", i); return 0; } The -O1 optimization level is sufficient to make the bug appear.