! { 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