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