OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc4/] [libgomp/] [testsuite/] [libgomp.fortran/] [threadprivate2.f90] - Diff between revs 273 and 519

Only display areas with differences | Details | Blame | View Log

Rev 273 Rev 519
! { dg-do run }
! { dg-do run }
! { dg-require-effective-target tls_runtime }
! { dg-require-effective-target tls_runtime }
module threadprivate2
module threadprivate2
  integer, dimension(:,:), allocatable :: foo
  integer, dimension(:,:), allocatable :: foo
!$omp threadprivate (foo)
!$omp threadprivate (foo)
end module threadprivate2
end module threadprivate2
  use omp_lib
  use omp_lib
  use threadprivate2
  use threadprivate2
  integer, dimension(:), pointer :: bar1
  integer, dimension(:), pointer :: bar1
  integer, dimension(2), target :: bar2
  integer, dimension(2), target :: bar2
  common /thrc/ bar1, bar2
  common /thrc/ bar1, bar2
!$omp threadprivate (/thrc/)
!$omp threadprivate (/thrc/)
  integer, dimension(:), pointer, save :: bar3 => NULL()
  integer, dimension(:), pointer, save :: bar3 => NULL()
!$omp threadprivate (bar3)
!$omp threadprivate (bar3)
  logical :: l
  logical :: l
  type tt
  type tt
    integer :: a
    integer :: a
    integer :: b = 32
    integer :: b = 32
  end type tt
  end type tt
  type (tt), save :: baz
  type (tt), save :: baz
!$omp threadprivate (baz)
!$omp threadprivate (baz)
  l = .false.
  l = .false.
  call omp_set_dynamic (.false.)
  call omp_set_dynamic (.false.)
  call omp_set_num_threads (4)
  call omp_set_num_threads (4)
!$omp parallel num_threads (4) reduction (.or.:l)
!$omp parallel num_threads (4) reduction (.or.:l)
  l = allocated (foo)
  l = allocated (foo)
  allocate (foo (6 + omp_get_thread_num (), 3))
  allocate (foo (6 + omp_get_thread_num (), 3))
  l = l.or..not.allocated (foo)
  l = l.or..not.allocated (foo)
  l = l.or.size (foo).ne.(18 + 3 * omp_get_thread_num ())
  l = l.or.size (foo).ne.(18 + 3 * omp_get_thread_num ())
  foo = omp_get_thread_num () + 1
  foo = omp_get_thread_num () + 1
  bar2 = omp_get_thread_num ()
  bar2 = omp_get_thread_num ()
  l = l.or.associated (bar3)
  l = l.or.associated (bar3)
  bar1 => bar2
  bar1 => bar2
  l = l.or..not.associated (bar1)
  l = l.or..not.associated (bar1)
  l = l.or..not.associated (bar1, bar2)
  l = l.or..not.associated (bar1, bar2)
  l = l.or.any (bar1.ne.omp_get_thread_num ())
  l = l.or.any (bar1.ne.omp_get_thread_num ())
  nullify (bar1)
  nullify (bar1)
  l = l.or.associated (bar1)
  l = l.or.associated (bar1)
  allocate (bar3 (4))
  allocate (bar3 (4))
  l = l.or..not.associated (bar3)
  l = l.or..not.associated (bar3)
  bar3 = omp_get_thread_num () - 2
  bar3 = omp_get_thread_num () - 2
  l = l.or.(baz%b.ne.32)
  l = l.or.(baz%b.ne.32)
  baz%a = omp_get_thread_num () * 2
  baz%a = omp_get_thread_num () * 2
  baz%b = omp_get_thread_num () * 2 + 1
  baz%b = omp_get_thread_num () * 2 + 1
!$omp end parallel
!$omp end parallel
  if (l) call abort
  if (l) call abort
  if (.not.allocated (foo)) call abort
  if (.not.allocated (foo)) call abort
  if (size (foo).ne.18) call abort
  if (size (foo).ne.18) call abort
  if (any (foo.ne.1)) call abort
  if (any (foo.ne.1)) call abort
  if (associated (bar1)) call abort
  if (associated (bar1)) call abort
  if (.not.associated (bar3)) call abort
  if (.not.associated (bar3)) call abort
  if (any (bar3 .ne. -2)) call abort
  if (any (bar3 .ne. -2)) call abort
  deallocate (bar3)
  deallocate (bar3)
  if (associated (bar3)) call abort
  if (associated (bar3)) call abort
!$omp parallel num_threads (4) reduction (.or.:l)
!$omp parallel num_threads (4) reduction (.or.:l)
  l = l.or..not.allocated (foo)
  l = l.or..not.allocated (foo)
  l = l.or.size (foo).ne.(18 + 3 * omp_get_thread_num ())
  l = l.or.size (foo).ne.(18 + 3 * omp_get_thread_num ())
  l = l.or.any (foo.ne.(omp_get_thread_num () + 1))
  l = l.or.any (foo.ne.(omp_get_thread_num () + 1))
  if (omp_get_thread_num () .ne. 0) then
  if (omp_get_thread_num () .ne. 0) then
    deallocate (foo)
    deallocate (foo)
    l = l.or.allocated (foo)
    l = l.or.allocated (foo)
  end if
  end if
  l = l.or.associated (bar1)
  l = l.or.associated (bar1)
  if (omp_get_thread_num () .ne. 0) then
  if (omp_get_thread_num () .ne. 0) then
    l = l.or..not.associated (bar3)
    l = l.or..not.associated (bar3)
    l = l.or.any (bar3 .ne. omp_get_thread_num () - 2)
    l = l.or.any (bar3 .ne. omp_get_thread_num () - 2)
    deallocate (bar3)
    deallocate (bar3)
  end if
  end if
  l = l.or.associated (bar3)
  l = l.or.associated (bar3)
  l = l.or.(baz%a.ne.(omp_get_thread_num () * 2))
  l = l.or.(baz%a.ne.(omp_get_thread_num () * 2))
  l = l.or.(baz%b.ne.(omp_get_thread_num () * 2 + 1))
  l = l.or.(baz%b.ne.(omp_get_thread_num () * 2 + 1))
!$omp end parallel
!$omp end parallel
  if (l) call abort
  if (l) call abort
  if (.not.allocated (foo)) call abort
  if (.not.allocated (foo)) call abort
  if (size (foo).ne.18) call abort
  if (size (foo).ne.18) call abort
  if (any (foo.ne.1)) call abort
  if (any (foo.ne.1)) call abort
  deallocate (foo)
  deallocate (foo)
  if (allocated (foo)) call abort
  if (allocated (foo)) call abort
end
end
! { dg-final { cleanup-modules "threadprivate2" } }
! { dg-final { cleanup-modules "threadprivate2" } }
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.