https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82207

            Bug ID: 82207
           Summary: ieee_class identifies signaling NaNs as quiet NaNs
           Product: gcc
           Version: 7.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: sacks at ucar dot edu
  Target Milestone: ---

With gfortran 5.4.0, gfortran 6.3.0 and gfortran 7.1.0, running ieee_class on a
signaling NaN identifies it as an ieee_quiet_nan rather than an
ieee_signaling_nan.

(Sorry, I don't have a more recent gfortran version readily available.)

I have tried creating the NaN values using both:

(1)
  my_nan = ieee_value(my_nan, ieee_signaling_nan)

(2)

  integer, parameter :: i8 = selected_int_kind(13)
  integer(i8), parameter :: dsnan_pat = int(Z'7FF4000000000000',i8)
  my_nan = transfer(dsnan_pat, my_nan)

In both cases, I then used this code to print the type of NaN:

     my_class = ieee_class(my_nan)
     if (my_class == ieee_signaling_nan) then
        print *, 'signaling nan'
     else if (my_class == ieee_quiet_nan) then
        print *, 'quiet nan'
     else if (my_class == ieee_other_value) then
        print *, 'other value'
     else
        print *, 'UNKNOWN'
     end if


and it printed 'quiet nan'.

For full code and additional information, see:

https://github.com/NCAR/billsacks-gfortran-snan/tree/master_n01

(Note that that code and README file includes some additional stuff not
directly relevant to this bug, since I was using that test program to test a
number of aspects of gfortran's NaN handling.)

Reply via email to