35 lines
655 B
Fortran
35 lines
655 B
Fortran
|
! { dg-do run }
|
||
|
|
||
|
integer :: i
|
||
|
common /c/ i
|
||
|
i = -1
|
||
|
!$omp parallel shared (i) num_threads (4)
|
||
|
call test1
|
||
|
!$omp end parallel
|
||
|
end
|
||
|
subroutine test1
|
||
|
integer :: vari
|
||
|
call test2
|
||
|
call test3
|
||
|
contains
|
||
|
subroutine test2
|
||
|
use omp_lib
|
||
|
integer :: i
|
||
|
common /c/ i
|
||
|
!$omp single
|
||
|
i = omp_get_thread_num ()
|
||
|
call test4
|
||
|
!$omp end single copyprivate (vari)
|
||
|
end subroutine test2
|
||
|
subroutine test3
|
||
|
integer :: i
|
||
|
common /c/ i
|
||
|
if (i .lt. 0 .or. i .ge. 4) stop 1
|
||
|
if (i + 10 .ne. vari) stop 2
|
||
|
end subroutine test3
|
||
|
subroutine test4
|
||
|
use omp_lib
|
||
|
vari = omp_get_thread_num () + 10
|
||
|
end subroutine test4
|
||
|
end subroutine test1
|