54 lines
857 B
Fortran
54 lines
857 B
Fortran
|
! { 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
|