35 lines
761 B
Fortran
35 lines
761 B
Fortran
|
! { 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) call abort
|
||
|
if (iand (k, 255) .ne. 0) call abort
|
||
|
if (iand (k, 65280) .eq. 0) then
|
||
|
if (k .ne. 65536 * 4) call abort
|
||
|
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
|