Dear Maintainer,
O option affects the return value of isinf(nan).
user@m68k-sid:~$ cat n.c
#include <math.h>
#include <stdio.h>
int main() {
double inf = HUGE_VAL;
double nan = (inf / inf);
printf("isinf(inf)=%d\n", isinf(inf));
printf("isinf(nan)=%d\n", isinf(nan));
printf("isnan(inf)=%d\n", isnan(inf));
printf("isnan(nan)=%d\n", isnan(nan));
printf("inf=%f nan=%f\n", inf, nan);
return 0;
}
user@m68k-sid:~$ gcc n.c
user@m68k-sid:~$ ./a.out
isinf(inf)=1
isinf(nan)=1
isnan(inf)=0
isnan(nan)=1
inf=inf nan=nan
user@m68k-sid:~$ gcc -O1 n.c
user@m68k-sid:~$ ./a.out
isinf(inf)=1
isinf(nan)=0
isnan(inf)=0
isnan(nan)=1
inf=inf nan=nan
user@m68k-sid:~$ gcc -O2 n.c
user@m68k-sid:~$ ./a.out
isinf(inf)=1
isinf(nan)=0
isnan(inf)=0
isnan(nan)=1
inf=inf nan=nan
user@m68k-sid:~$ gcc -O3 n.c
user@m68k-sid:~$ ./a.out
isinf(inf)=1
isinf(nan)=0
isnan(inf)=0
isnan(nan)=1
inf=inf nan=nan
user@m68k-sid:~$