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