2 ! { dg-options "-fno-range-check" }
5 ! Test transfers of +Inf and -Inf
6 ! Testcase contributed by Jos de Kloe <kloedej@knmi.nl>
11 integer, parameter :: i8_
= Selected_Int_Kind(18) ! = integer*8
12 integer, parameter :: r8_
= Selected_Real_Kind(15,307) ! = real*8
14 integer(i8_
), parameter :: bit_pattern_PosInf_i8_p
= 9218868437227405312_i8_
15 integer(i8_
), parameter :: bit_pattern_NegInf_i8_p
= -4503599627370496_i8_
17 integer(i8_
) :: bit_pattern_PosInf_i8
= 9218868437227405312_i8_
18 integer(i8_
) :: bit_pattern_NegInf_i8
= -4503599627370496_i8_
20 integer(i8_
) :: bit_pattern_PosInf_i8_hex
21 integer(i8_
) :: bit_pattern_NegInf_i8_hex
26 data bit_pattern_PosInf_i8_hex
/z
'7FF0000000000000'/
27 !data bit_pattern_NegInf_i8_hex /z'FFF0000000000000'/
28 ! not portable, replaced by:
29 bit_pattern_NegInf_i8_hex
= ibset(bit_pattern_PosInf_i8_hex
,63)
31 if (bit_pattern_NegInf_i8_hex
/= bit_pattern_NegInf_i8
) STOP 1
32 if (bit_pattern_PosInf_i8_hex
/= bit_pattern_PosInf_i8
) STOP 2
34 r
= transfer(bit_pattern_PosInf_i8
,r
)
35 if (r
/= 1.0_r8_
/0.0_r8_
) STOP 3
37 if (bit_pattern_PosInf_i8
/= i
) STOP 4
39 r
= transfer(bit_pattern_NegInf_i8
,r
)
40 if (r
/= -1.0_r8_
/0.0_r8_
) STOP 5
42 if (bit_pattern_NegInf_i8
/= i
) STOP 6
44 r
= transfer(bit_pattern_PosInf_i8_p
,r
)
45 if (r
/= 1.0_r8_
/0.0_r8_
) STOP 7
47 if (bit_pattern_PosInf_i8_p
/= i
) STOP 8
49 r
= transfer(bit_pattern_NegInf_i8_p
,r
)
50 if (r
/= -1.0_r8_
/0.0_r8_
) STOP 9
52 if (bit_pattern_NegInf_i8_p
/= i
) STOP 10
53 END PROGRAM TestInfinite