modula2: Simplify REAL/LONGREAL/SHORTREAL node creation.
[official-gcc.git] / gcc / testsuite / gfortran.dg / pr96711.f90
blob3fa5d99cbf2363089059b95daaa8b77850ec04df
1 ! { dg-do run }
2 ! { dg-require-effective-target fortran_integer_16 }
3 ! { dg-require-effective-target fortran_real_16 }
4 ! { dg-additional-options "-fdump-tree-original" }
5 ! { dg-final { scan-tree-dump-times "_gfortran_stop_numeric" 2 "original" } }
7 ! PR fortran/96711 - ICE on NINT() Function
9 program p
10 implicit none
11 real(8) :: x
12 real(16) :: y
13 ! Assume radix(x) == 2
14 ! 2/epsilon(x) = 2/(radix(x)**(1-digits(x)) = 2**digits(x) with that assumption
15 integer(16), parameter :: k1 = nint (2 / epsilon (x), kind(k1))
16 integer(16), parameter :: k2 = nint (2 / epsilon (y), kind(k2))
17 integer(16), parameter :: m1 = 2_16**digits(x) ! IEEE: 2**53
18 integer(16), parameter :: m2 = 2_16**digits(y) ! IEEE: 2**113
19 integer(16), volatile :: m
20 x = 2 / epsilon (x)
21 y = 2 / epsilon (y)
22 m = nint (x, kind(m))
23 ! print *, m
24 if (k1 /= m1) stop 1
25 if (m /= m1) stop 2
26 m = nint (y, kind(m))
27 ! print *, m
28 if (k2 /= m2) stop 3
29 if (m /= m2) stop 4
30 end program