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