Mercurial > hg > CbC > CbC_gcc
view libgomp/testsuite/libgomp.fortran/threadprivate4.f90 @ 122:fb3d53c41846
do not expand code segment
author | mir3636 |
---|---|
date | Thu, 22 Mar 2018 17:37:58 +0900 |
parents | 04ced10e8804 |
children | 84e7813d76e9 |
line wrap: on
line source
! { dg-do run } ! { dg-require-effective-target tls_runtime } module threadprivate4 integer :: vi procedure(), pointer :: foo !$omp threadprivate (foo, vi) contains subroutine fn0 vi = 0 end subroutine fn0 subroutine fn1 vi = 1 end subroutine fn1 subroutine fn2 vi = 2 end subroutine fn2 subroutine fn3 vi = 3 end subroutine fn3 end module threadprivate4 use omp_lib use threadprivate4 integer :: i logical :: l procedure(), pointer :: bar1 common /thrc/ bar1 !$omp threadprivate (/thrc/) procedure(), pointer, save :: bar2 !$omp threadprivate (bar2) l = .false. call omp_set_dynamic (.false.) call omp_set_num_threads (4) !$omp parallel num_threads (4) reduction (.or.:l) private (i) i = omp_get_thread_num () if (i.eq.0) then foo => fn0 bar1 => fn0 bar2 => fn0 elseif (i.eq.1) then foo => fn1 bar1 => fn1 bar2 => fn1 elseif (i.eq.2) then foo => fn2 bar1 => fn2 bar2 => fn2 else foo => fn3 bar1 => fn3 bar2 => fn3 end if vi = -1 !$omp barrier vi = -1 call foo () l=l.or.(vi.ne.i) vi = -2 call bar1 () l=l.or.(vi.ne.i) vi = -3 call bar2 () l=l.or.(vi.ne.i) vi = -1 !$omp end parallel if (l) call abort end ! { dg-final { cleanup-modules "threadprivate4" } }