#1008190 gcc-11: isinf(nan) returns 1 with -O0 on m68k

Package:
gcc-11
Source:
gcc-11
Description:
GNU C compiler
Submitter:
Kazuhiro NISHIYAMA
Date:
2022-03-24 06:24:03 UTC
Severity:
normal
#1008190#5
Date:
2022-03-24 06:04:48 UTC
From:
To:
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:~$