1! { dg-do run }
2! { dg-add-options ieee }
3! { dg-skip-if "NaN not supported" { spu-*-* } { "*" } { "" } }
4  real :: a(3), nan, minf, pinf
5  integer :: ia(1)
6  real, allocatable :: c(:)
7  logical :: l
8  logical :: l2(3)
9
10  nan = 0.0
11  minf = 0.0
12  pinf = 0.0
13  nan = 0.0/nan
14  minf = -1.0/minf
15  pinf = 1.0/pinf
16
17  allocate (c(3))
18  a(:) = nan
19  ia = minloc (a)
20  if (ia(1).ne.1) call abort
21  a(:) = pinf
22  ia = minloc (a)
23  if (ia(1).ne.1) call abort
24  a(1:2) = nan
25  ia = minloc (a)
26  if (ia(1).ne.3) call abort
27  a(2) = 1.0
28  ia = minloc (a)
29  if (ia(1).ne.2) call abort
30  a(2) = minf
31  ia = minloc (a)
32  if (ia(1).ne.2) call abort
33  c(:) = nan
34  ia = minloc (c)
35  if (ia(1).ne.1) call abort
36  c(:) = pinf
37  ia = minloc (c)
38  if (ia(1).ne.1) call abort
39  c(1:2) = nan
40  ia = minloc (c)
41  if (ia(1).ne.3) call abort
42  c(2) = 1.0
43  ia = minloc (c)
44  if (ia(1).ne.2) call abort
45  c(2) = minf
46  ia = minloc (c)
47  if (ia(1).ne.2) call abort
48  l = .false.
49  l2(:) = .false.
50  a(:) = nan
51  ia = minloc (a, mask = l)
52  if (ia(1).ne.0) call abort
53  ia = minloc (a, mask = l2)
54  if (ia(1).ne.0) call abort
55  a(:) = pinf
56  ia = minloc (a, mask = l)
57  if (ia(1).ne.0) call abort
58  ia = minloc (a, mask = l2)
59  if (ia(1).ne.0) call abort
60  a(1:2) = nan
61  ia = minloc (a, mask = l)
62  if (ia(1).ne.0) call abort
63  ia = minloc (a, mask = l2)
64  if (ia(1).ne.0) call abort
65  a(2) = 1.0
66  ia = minloc (a, mask = l)
67  if (ia(1).ne.0) call abort
68  ia = minloc (a, mask = l2)
69  if (ia(1).ne.0) call abort
70  a(2) = minf
71  ia = minloc (a, mask = l)
72  if (ia(1).ne.0) call abort
73  ia = minloc (a, mask = l2)
74  if (ia(1).ne.0) call abort
75  c(:) = nan
76  ia = minloc (c, mask = l)
77  if (ia(1).ne.0) call abort
78  ia = minloc (c, mask = l2)
79  if (ia(1).ne.0) call abort
80  c(:) = pinf
81  ia = minloc (c, mask = l)
82  if (ia(1).ne.0) call abort
83  ia = minloc (c, mask = l2)
84  if (ia(1).ne.0) call abort
85  c(1:2) = nan
86  ia = minloc (c, mask = l)
87  if (ia(1).ne.0) call abort
88  ia = minloc (c, mask = l2)
89  if (ia(1).ne.0) call abort
90  c(2) = 1.0
91  ia = minloc (c, mask = l)
92  if (ia(1).ne.0) call abort
93  ia = minloc (c, mask = l2)
94  if (ia(1).ne.0) call abort
95  c(2) = minf
96  ia = minloc (c, mask = l)
97  if (ia(1).ne.0) call abort
98  ia = minloc (c, mask = l2)
99  if (ia(1).ne.0) call abort
100  l = .true.
101  l2(:) = .true.
102  a(:) = nan
103  ia = minloc (a, mask = l)
104  if (ia(1).ne.1) call abort
105  ia = minloc (a, mask = l2)
106  if (ia(1).ne.1) call abort
107  a(:) = pinf
108  ia = minloc (a, mask = l)
109  if (ia(1).ne.1) call abort
110  ia = minloc (a, mask = l2)
111  if (ia(1).ne.1) call abort
112  a(1:2) = nan
113  ia = minloc (a, mask = l)
114  if (ia(1).ne.3) call abort
115  ia = minloc (a, mask = l2)
116  if (ia(1).ne.3) call abort
117  a(2) = 1.0
118  ia = minloc (a, mask = l)
119  if (ia(1).ne.2) call abort
120  ia = minloc (a, mask = l2)
121  if (ia(1).ne.2) call abort
122  a(2) = minf
123  ia = minloc (a, mask = l)
124  if (ia(1).ne.2) call abort
125  ia = minloc (a, mask = l2)
126  if (ia(1).ne.2) call abort
127  c(:) = nan
128  ia = minloc (c, mask = l)
129  if (ia(1).ne.1) call abort
130  ia = minloc (c, mask = l2)
131  if (ia(1).ne.1) call abort
132  c(:) = pinf
133  ia = minloc (c, mask = l)
134  if (ia(1).ne.1) call abort
135  ia = minloc (c, mask = l2)
136  if (ia(1).ne.1) call abort
137  c(1:2) = nan
138  ia = minloc (c, mask = l)
139  if (ia(1).ne.3) call abort
140  ia = minloc (c, mask = l2)
141  if (ia(1).ne.3) call abort
142  c(2) = 1.0
143  ia = minloc (c, mask = l)
144  if (ia(1).ne.2) call abort
145  ia = minloc (c, mask = l2)
146  if (ia(1).ne.2) call abort
147  c(2) = minf
148  ia = minloc (c, mask = l)
149  if (ia(1).ne.2) call abort
150  ia = minloc (c, mask = l2)
151  if (ia(1).ne.2) call abort
152  deallocate (c)
153  allocate (c(-2:-3))
154  ia = minloc (c)
155  if (ia(1).ne.0) call abort
156end
157