1!{ dg-do run }
2!{ dg-options "-fno-range-check" }
3!{ dg-add-options ieee }
4!{ dg-skip-if "NaN not supported" { spu-*-* } { "*" } { "" } }
5! PR19310 and PR19904, allow disabling range check during compile.
6! Contributed by Jerry DeLisle  <jvdelisle@gcc.gnu.org>
7program main
8  character(len=80) str
9  real, parameter :: zero=0, nan=0/zero
10  complex :: z = (-0.1,-2.2)/(0.0,0.0)
11  complex :: z2 = (0.1,1)/0
12  complex :: z3 = (1e35, -2e3)/1.234e-37
13  complex :: z4 = (1e-35, -2e-35)/1234e34
14  real :: a
15  a = exp(1000.0)
16  b = 1/exp(1000.0)
17
18  write(str,*) a
19  if (trim(adjustl(str)) .ne. 'Infinity') call abort
20
21  if (b .ne. 0.) call abort
22
23  write(str,*) -1.0/b
24  if (trim(adjustl(str)) .ne. '-Infinity') call abort
25
26  write(str,*) b/0.0
27  if (trim(adjustl(str)) .ne. 'NaN') call abort
28
29  write(str,*) 0.0/0.0
30  if (trim(adjustl(str)) .ne. 'NaN') call abort
31
32  write(str,*) 1.0/(-0.)
33  if (trim(adjustl(str)) .ne. '-Infinity') call abort
34
35  write(str,*) -2.0/0.
36  if (trim(adjustl(str)) .ne. '-Infinity') call abort
37
38  write(str,*) 3.0/0.
39  if (trim(adjustl(str)) .ne. 'Infinity') call abort
40
41  write(str,*)  nan
42  if (trim(adjustl(str)) .ne. 'NaN') call abort
43
44  write(str,*) z
45  if (trim(adjustl(str)) .ne. '(             NaN,             NaN)') call abort
46
47  write(str,*) z2
48  if (trim(adjustl(str)) .ne. '(             NaN,             NaN)') call abort
49
50  write(str,*) z3
51  if (trim(adjustl(str)) .ne. '(        Infinity,       -Infinity)') call abort
52
53  write(str,*) z4
54  if (trim(adjustl(str)) .ne. '(  0.00000000    , -0.00000000    )') call abort
55
56end program main
57