PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gfortran.dg / transfer_simplify_3.f90
blobd45923418986de2242544f1cdcfeade9a763a2cd
1 ! { dg-do run }
2 ! { dg-options "-fno-range-check" }
3 ! PR fortran/32083
5 ! Test transfers of +Inf and -Inf
6 ! Testcase contributed by Jos de Kloe <kloedej@knmi.nl>
9 PROGRAM TestInfinite
10 IMPLICIT NONE
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
23 integer(i8_) :: i
24 real(r8_) :: r
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
36 i = transfer(r,i)
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
41 i = transfer(r,i)
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
46 i = transfer(r,i)
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
51 i = transfer(r,i)
52 if (bit_pattern_NegInf_i8_p /= i) STOP 10
53 END PROGRAM TestInfinite