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) call abort 12 if (iand (k, 255) .ne. 0) call abort 13 if (iand (k, 65280) .eq. 0) then 14 if (k .ne. 65536 * 4) call abort 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