! { dg-do run }
program myprog
  type mytype
    integer, allocatable :: myarr(:,:)
  end type mytype
  integer :: i
  type(mytype), allocatable :: typearr(:)
  allocate(typearr(1:100))
  do i=1,100
    allocate(typearr(i)%myarr(1:100,1:100))
  end do
  do i=1,100
    typearr(i)%myarr(:,:) = 0
  end do
  !$acc enter data copyin(typearr)
  do i=1,100
    !$acc enter data copyin(typearr(i)%myarr)
  end do
  i=33
  typearr(i)%myarr(:,:) = 50
  !$acc update device(typearr(i)%myarr(:,:))
  do i=1,100
    !$acc exit data copyout(typearr(i)%myarr)
  end do
  !$acc exit data delete(typearr)
  do i=1,100
    if (i.eq.33) then
      if (any(typearr(i)%myarr.ne.50)) stop 1
    else
      if (any(typearr(i)%myarr.ne.0)) stop 2
    end if
  end do
  do i=1,100
    deallocate(typearr(i)%myarr)
  end do
  deallocate(typearr)
end program myprog