> 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