isnan and exceptions

Florian Weimer fweimer@redhat.com
Fri Aug 28 15:23:04 GMT 2020


It seems that __builtin_isnanl raises Invalid Operation for sNaNs on
x86-64, but glibc's isnanl implementation does not.

Is this expected?  Are both behaviors correct?

The background of my question is that if I replace isnanl with this:

int
isnanl (long double x)
{
  return __builtin_isnanl (x);
}

I get these test suite failures:

testing long double (without inline functions)
Failure: isnan (sNaN): Exception "Invalid operation" set
Failure: isnan (-sNaN): Exception "Invalid operation" set
Failure: isnan_downward (sNaN): Exception "Invalid operation" set
Failure: isnan_downward (-sNaN): Exception "Invalid operation" set
Failure: isnan_towardzero (sNaN): Exception "Invalid operation" set
Failure: isnan_towardzero (-sNaN): Exception "Invalid operation" set
Failure: isnan_upward (sNaN): Exception "Invalid operation" set
Failure: isnan_upward (-sNaN): Exception "Invalid operation" set

Thanks,
Florian



More information about the Libc-help mailing list