1! { dg-do run }
2!$ use omp_lib
3
4  integer (kind = 4) :: i, ia (6), n, cnt
5  real :: r, ra (4)
6  double precision :: d, da (5)
7  logical :: v
8
9  i = 1
10  ia = 2
11  r = 3
12  ra = 4
13  d = 5.5
14  da = 6.5
15  v = .false.
16  cnt = -1
17
18!$omp parallel num_threads (3) private (n) reduction (.or.:v) &
19!$omp & reduction (max:i, ia, r, ra, d, da)
20!$ if (i .ne. -huge(i)-1 .or. any (ia .ne. -huge(ia)-1)) v = .true.
21!$ if (r .ge. -1.0d38 .or. any (ra .ge. -1.0d38)) v = .true.
22!$ if (d .ge. -1.0d300 .or. any (da .ge. -1.0d300)) v = .true.
23  n = omp_get_thread_num ()
24  if (n .eq. 0) then
25    cnt = omp_get_num_threads ()
26    i = 4
27    ia(3:5) = -2
28    ia(1) = 7
29    r = 5
30    ra(1:2) = 6.5
31    d = -2.5
32    da(2:4) = 8.5
33  else if (n .eq. 1) then
34    i = 2
35    ia(4:6) = 5
36    r = 1
37    ra(2:4) = -1.5
38    d = 8.5
39    da(1:3) = 2.5
40  else
41    i = 1
42    ia = 1
43    r = -1
44    ra = -1
45    d = 1
46    da = -1
47  end if
48!$omp end parallel
49  if (v) stop 1
50  if (cnt .eq. 3) then
51    if (i .ne. 4 .or. any (ia .ne. (/7, 2, 2, 5, 5, 5/))) stop 2
52    if (r .ne. 5 .or. any (ra .ne. (/6.5, 6.5, 4., 4./))) stop 3
53    if (d .ne. 8.5 .or. any (da .ne. (/6.5, 8.5, 8.5, 8.5, 6.5/))) stop 4
54  end if
55
56  i = 1
57  ia = 2
58  r = 3
59  ra = 4
60  d = 5.5
61  da = 6.5
62  v = .false.
63  cnt = -1
64
65!$omp parallel num_threads (3) private (n) reduction (.or.:v) &
66!$omp & reduction (min:i, ia, r, ra, d, da)
67!$ if (i .ne. 2147483647 .or. any (ia .ne. 2147483647)) v = .true.
68!$ if (r .le. 1.0d38 .or. any (ra .le. 1.0d38)) v = .true.
69!$ if (d .le. 1.0d300 .or. any (da .le. 1.0d300)) v = .true.
70  n = omp_get_thread_num ()
71  if (n .eq. 0) then
72    cnt = omp_get_num_threads ()
73    i = 4
74    ia(3:5) = -2
75    ia(1) = 7
76    r = 5
77    ra(1:2) = 6.5
78    d = -2.5
79    da(2:4) = 8.5
80  else if (n .eq. 1) then
81    i = 2
82    ia(4:6) = 5
83    r = 1
84    ra(2:4) = -1.5
85    d = 8.5
86    da(1:3) = 2.5
87  else
88    i = 1
89    ia = 1
90    r = -1
91    ra = 7
92    ra(3) = -8.5
93    d = 1
94    da(1:4) = 6
95  end if
96!$omp end parallel
97  if (v) stop 5
98  if (cnt .eq. 3) then
99    if (i .ne. 1 .or. any (ia .ne. (/1, 1, -2, -2, -2, 1/))) stop 6
100    if (r .ne. -1 .or. any (ra .ne. (/4., -1.5, -8.5, -1.5/))) stop 7
101    if (d .ne. -2.5 .or. any (da .ne. (/2.5, 2.5, 2.5, 6., 6.5/))) stop 8
102  end if
103end
104