! { dg-do run } !$ use omp_lib integer :: i, j, k double precision :: d i = 6 j = 19 k = 0 d = 24.5 call test (i, j, k, d) if (i .ne. 38) stop 1 if (iand (k, 255) .ne. 0) stop 2 if (iand (k, 65280) .eq. 0) then if (k .ne. 65536 * 4) stop 3 end if contains subroutine test (i, j, k, d) integer :: i, j, k double precision :: d !$omp parallel firstprivate (d) private (j) num_threads (4) reduction (+:k) if (i .ne. 6 .or. d .ne. 24.5 .or. k .ne. 0) k = k + 1 if (omp_get_num_threads () .ne. 4) k = k + 256 d = d / 2 j = 8 k = k + 65536 !$omp barrier if (d .ne. 12.25 .or. j .ne. 8) k = k + 1 !$omp single i = i + 32 !$omp end single nowait !$omp end parallel end subroutine test end