> Presumably that can be reproduced without depending on the new built-in > function? In which case it's an existing bug somewhere in the optimizers.
Yes: $ cat a.c #include <math.h> #include <stdio.h> #include <fenv.h> void foo (void) { if (fetestexcept (FE_INVALID) & FE_INVALID) printf("Invalid raised\n"); feclearexcept (FE_ALL_EXCEPT); } static inline int iseqsig(float x, float y) { return (x >= y && x <= y); } int main (void) { float x = __builtin_nanf(""); float y; printf("%d\n", iseqsig(__builtin_nanf(""), 1.)); foo(); printf("%d\n", iseqsig(x, __builtin_inff())); foo(); } $ ./bin/gcc a.c -lm -fno-unsafe-math-optimizations -frounding-math -fsignaling-nans -O0 && ./a.out 0 Invalid raised 0 Invalid raised $ ./bin/gcc a.c -lm -fno-unsafe-math-optimizations -frounding-math -fsignaling-nans -O1 && ./a.out 0 0 Do you want me to file a bug report? FX