1! { dg-do run }
2program main
3  implicit none
4  integer, parameter :: n=5
5  character(len=6), dimension(n,n) :: a
6  integer, dimension(n,n) :: v
7  character(len=6), dimension(n) :: r1, r2
8  character(len=6), dimension(:,:), allocatable :: a_alloc
9  integer, dimension(:,:), allocatable :: v_alloc
10  character(len=6), parameter :: zero = achar(0) // achar(0) // achar(0) // achar(0) // achar(0) // achar(0)
11  integer :: i
12  character(len=6),dimension(1) :: ret
13  logical, dimension(n,n) :: mask
14  logical :: smask
15
16  v = reshape([(i*i+200-17*i,i=1,n*n)],shape(v))
17  write (unit=a,fmt='(I6.6)') (i*i+200-17*i,i=1,n*n)
18
19  r1 =  maxval(a,dim=1)
20  write (unit=r2,fmt='(I6.6)') maxval(v,dim=1)
21  if (any (r1 /= r2)) STOP 1
22  r1 = 'x'
23  write (unit=r1,fmt='(I6.6)') maxval(v,dim=1)
24  if (any (r1 /= r2)) STOP 2
25
26  r1 = 'y'
27  r1 =  maxval(a,dim=2)
28  write (unit=r2,fmt='(I6.6)') maxval(v,dim=2)
29  if (any (r1 /= r2)) STOP 3
30  r1 = 'z'
31  write (unit=r1,fmt='(I6.6)') maxval(v,dim=2)
32  if (any (r1 /= r2)) STOP 4
33
34  allocate (a_alloc(0,1), v_alloc(0,1))
35  ret = 'what'
36  ret = maxval(a_alloc,dim=1)
37  if (ret(1) /= zero) STOP 5
38
39  r1 = 'qq'
40  r1 = maxval(a, dim=1, mask=a>"000200");
41  if (any(r1 /= zero .neqv. maxval(v,dim=1, mask=v>200) > 0)) STOP 6
42  if (any(maxval(a, dim=1, mask=a>"000200") /= zero .neqv. maxval(v,dim=1, mask=v>200) > 0)) STOP 7
43
44  r1 = 'rr'
45  r1 = maxval(a, dim=2, mask=a>"000200");
46  if (any(r1 /= zero .neqv. maxval(v,dim=2, mask=v>200) > 0)) STOP 8
47  if (any(maxval(a, dim=2, mask=a>"000200") /= zero .neqv. maxval(v,dim=2, mask=v>200) > 0)) STOP 9
48
49  mask = .true.
50  forall (i=1:n)
51     mask(i,i) = .false.
52  end forall
53
54  r1 = 'aa'
55  r1 = maxval(a, dim=1, mask=mask)
56  write(unit=r2,fmt='(I6.6)') maxval(v,dim=1, mask=mask)
57  if (any(r1 /= r2)) STOP 10
58
59  r1 = 'xyz'
60  smask = .true.
61  r1 = maxval(a, dim=1, mask=smask)
62  write (unit=r2,fmt='(I6.6)') maxval(v,dim=1)
63  if (any (r1 /= r2)) STOP 11
64
65  smask = .false.
66  r1 = 'foobar'
67  r1 = maxval(a, dim=1, mask=smask)
68  if (any(r1 /= zero)) STOP 12
69end program main
70