blob: 03b04c783ebf157e24ca2c5d952054482ca21601 [file] [log] [blame]
! { dg-do run { target { ! ia32 } } }
! x87 / x86-32 ABI is unsuitable for signaling NaNs
!
! { dg-require-effective-target issignaling } */
! The companion C source needs access to the issignaling macro.
!
! { dg-additional-sources signaling_2_c.c }
! { dg-additional-options "-w" }
! The -w option is needed to make cc1 not report a warning for
! the -fintrinsic-modules-path option passed by ieee.exp
!
program test
use, intrinsic :: iso_c_binding
use, intrinsic :: ieee_arithmetic
implicit none
interface
integer(kind=c_int) function isnansf (x) bind(c)
import :: c_float, c_int
real(kind=c_float), value :: x
end function
integer(kind=c_int) function isnans (x) bind(c)
import :: c_double, c_int
real(kind=c_double), value :: x
end function
integer(kind=c_int) function isnansl (x) bind(c)
import :: c_long_double, c_int
real(kind=c_long_double), value :: x
end function
end interface
real(kind=c_float) :: x
real(kind=c_double) :: y
real(kind=c_long_double) :: z
if (ieee_support_nan(x)) then
x = ieee_value(x, ieee_signaling_nan)
if (ieee_class(x) /= ieee_signaling_nan) stop 100
if (.not. ieee_is_nan(x)) stop 101
if (isnansf(x) /= 1) stop 102
x = ieee_value(x, ieee_quiet_nan)
if (ieee_class(x) /= ieee_quiet_nan) stop 103
if (.not. ieee_is_nan(x)) stop 104
if (isnansf(x) /= 0) stop 105
end if
if (ieee_support_nan(y)) then
y = ieee_value(y, ieee_signaling_nan)
if (ieee_class(y) /= ieee_signaling_nan) stop 100
if (.not. ieee_is_nan(y)) stop 101
if (isnans(y) /= 1) stop 102
y = ieee_value(y, ieee_quiet_nan)
if (ieee_class(y) /= ieee_quiet_nan) stop 103
if (.not. ieee_is_nan(y)) stop 104
if (isnans(y) /= 0) stop 105
end if
if (ieee_support_nan(z)) then
z = ieee_value(z, ieee_signaling_nan)
if (ieee_class(z) /= ieee_signaling_nan) stop 100
if (.not. ieee_is_nan(z)) stop 101
if (isnansl(z) /= 1) stop 102
z = ieee_value(z, ieee_quiet_nan)
if (ieee_class(z) /= ieee_quiet_nan) stop 103
if (.not. ieee_is_nan(z)) stop 104
if (isnansl(z) /= 0) stop 105
end if
end program test