blob: d45923418986de2242544f1cdcfeade9a763a2cd [file] [log] [blame]
! { dg-do run }
! { dg-options "-fno-range-check" }
! PR fortran/32083
!
! Test transfers of +Inf and -Inf
! Testcase contributed by Jos de Kloe <kloedej@knmi.nl>
!
PROGRAM TestInfinite
IMPLICIT NONE
integer, parameter :: i8_ = Selected_Int_Kind(18) ! = integer*8
integer, parameter :: r8_ = Selected_Real_Kind(15,307) ! = real*8
integer(i8_), parameter :: bit_pattern_PosInf_i8_p = 9218868437227405312_i8_
integer(i8_), parameter :: bit_pattern_NegInf_i8_p = -4503599627370496_i8_
integer(i8_) :: bit_pattern_PosInf_i8 = 9218868437227405312_i8_
integer(i8_) :: bit_pattern_NegInf_i8 = -4503599627370496_i8_
integer(i8_) :: bit_pattern_PosInf_i8_hex
integer(i8_) :: bit_pattern_NegInf_i8_hex
integer(i8_) :: i
real(r8_) :: r
data bit_pattern_PosInf_i8_hex /z'7FF0000000000000'/
!data bit_pattern_NegInf_i8_hex /z'FFF0000000000000'/
! not portable, replaced by:
bit_pattern_NegInf_i8_hex = ibset(bit_pattern_PosInf_i8_hex,63)
if (bit_pattern_NegInf_i8_hex /= bit_pattern_NegInf_i8) STOP 1
if (bit_pattern_PosInf_i8_hex /= bit_pattern_PosInf_i8) STOP 2
r = transfer(bit_pattern_PosInf_i8,r)
if (r /= 1.0_r8_/0.0_r8_) STOP 3
i = transfer(r,i)
if (bit_pattern_PosInf_i8 /= i) STOP 4
r = transfer(bit_pattern_NegInf_i8,r)
if (r /= -1.0_r8_/0.0_r8_) STOP 5
i = transfer(r,i)
if (bit_pattern_NegInf_i8 /= i) STOP 6
r = transfer(bit_pattern_PosInf_i8_p,r)
if (r /= 1.0_r8_/0.0_r8_) STOP 7
i = transfer(r,i)
if (bit_pattern_PosInf_i8_p /= i) STOP 8
r = transfer(bit_pattern_NegInf_i8_p,r)
if (r /= -1.0_r8_/0.0_r8_) STOP 9
i = transfer(r,i)
if (bit_pattern_NegInf_i8_p /= i) STOP 10
END PROGRAM TestInfinite