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