blob: f04d76d583abfe21c4d39de0f67de42138ea5065 [file] [log] [blame]
! { dg-do run }
type t
integer, allocatable :: A(:,:)
end type t
type(t), allocatable :: b(:)
integer :: i
allocate(b(1:20))
do i=1,20
allocate(b(i)%A(1:20,1:20))
end do
do i=1,20
b(i)%A(:,:) = 0
end do
!$acc enter data copyin(b)
do i=1,20
!$acc enter data copyin(b(i)%A)
end do
b(1)%A(:,:) = 5
!$acc update device(b(::2))
!$acc update device(b(1)%A(::3,::4))
do i=1,20
!$acc exit data copyout(b(i)%A)
end do
!$acc exit data copyout(b)
! This is necessarily conservative because the "update" is allowed to copy
! e.g. the whole of the containing block for a discontinuous update.
! Try to ensure that the update covers a sufficient portion of the array.
if (any(b(1)%A(::3,::4) .ne. 5)) stop 1
do i=2,20
if (any(b(i)%A(:,:) .ne. 0)) stop 2
end do
end