blob: e9a13a3c737d85e5bc75169098bbe8ac16a0b2d1 [file]
! { dg-do run }
! Test target enter data and target update to the target using map
! iterators.
program test
integer, parameter :: DIM1 = 8
integer, parameter :: DIM2 = 15
type :: array_ptr
integer, pointer :: arr(:)
end type
type (array_ptr) :: x(DIM1)
integer :: expected, sum, i, j
expected = mkarray (x)
!$omp target enter data map(to: x)
!$omp target enter data map(iterator(i=1:DIM1), to: x(i)%arr(:))
!$omp target map(from: sum)
sum = 0
do i = 1, DIM1
do j = 1, DIM2
sum = sum + x(i)%arr(j)
end do
end do
!$omp end target
print *, sum, expected
if (sum .ne. expected) stop 1
expected = 0
do i = 1, DIM1
do j = 1, DIM2
x(i)%arr(j) = x(i)%arr(j) * i * j
expected = expected + x(i)%arr(j)
end do
end do
!$omp target update to(iterator(i=1:DIM1): x(i)%arr(:))
!$omp target map(from: sum)
sum = 0
do i = 1, DIM1
do j = 1, DIM2
sum = sum + x(i)%arr(j)
end do
end do
!$omp end target
if (sum .ne. expected) stop 2
contains
integer function mkarray (x)
type (array_ptr), intent(inout) :: x(DIM1)
integer :: exp = 0
do i = 1, DIM1
allocate (x(i)%arr(DIM2))
do j = 1, DIM2
x(i)%arr(j) = i * j
exp = exp + x(i)%arr(j)
end do
end do
mkarray = exp
end function
end program