1! { dg-do run }
2!$ use omp_lib
3
4  integer :: i, j, k
5  double precision :: d
6  i = 6
7  j = 19
8  k = 0
9  d = 24.5
10  call test (i, j, k, d)
11  if (i .ne. 38) STOP 1
12  if (iand (k, 255) .ne. 0) STOP 2
13  if (iand (k, 65280) .eq. 0) then
14    if (k .ne. 65536 * 4) STOP 3
15  end if
16contains
17  subroutine test (i, j, k, d)
18    integer :: i, j, k
19    double precision :: d
20
21!$omp parallel firstprivate (d) private (j) num_threads (4) reduction (+:k)
22    if (i .ne. 6 .or. d .ne. 24.5 .or. k .ne. 0) k = k + 1
23    if (omp_get_num_threads () .ne. 4) k = k + 256
24    d = d / 2
25    j = 8
26    k = k + 65536
27!$omp barrier
28    if (d .ne. 12.25 .or. j .ne. 8) k = k + 1
29!$omp single
30    i = i + 32
31!$omp end single nowait
32!$omp end parallel
33  end subroutine test
34end
35