blob: 7bca2df662857dabf46bf57bb0d1b21c5995208d [file] [log] [blame]
! { dg-do run }
type type1
integer, allocatable :: arr1(:,:)
end type type1
type type2
type(type1) :: t1
end type type2
type type3
type(type2) :: t2(20)
end type type3
type type4
type(type3), allocatable :: t3(:)
end type type4
integer :: i, j, k
type(type4), allocatable :: var1(:)
type(type4) :: var2
type(type3) :: var3
allocate(var1(1:20))
do i=1,20
allocate(var1(i)%t3(1:20))
do j=1,20
do k=1,20
allocate(var1(i)%t3(j)%t2(k)%t1%arr1(1:20,1:20))
end do
end do
end do
allocate(var2%t3(1:20))
do i=1,20
do j=1,20
allocate(var2%t3(i)%t2(j)%t1%arr1(1:20,1:20))
end do
end do
do i=1,20
do j=1,20
do k=1,20
var1(i)%t3(j)%t2(k)%t1%arr1(:,:) = 0
end do
var2%t3(i)%t2(j)%t1%arr1(:,:) = 0
end do
end do
!$acc enter data copyin(var2%t3(4)%t2(3)%t1%arr1(:,:))
!$acc enter data copyin(var1(5)%t3(4)%t2(3)%t1%arr1(:,:))
var2%t3(4)%t2(3)%t1%arr1(:,:) = 5
var1(5)%t3(4)%t2(3)%t1%arr1(:,:) = 4
!$acc update device(var2%t3(4)%t2(3)%t1%arr1)
!$acc update device(var1(5)%t3(4)%t2(3)%t1%arr1)
!$acc exit data copyout(var1(5)%t3(4)%t2(3)%t1%arr1(:,:))
!$acc exit data copyout(var2%t3(4)%t2(3)%t1%arr1(:,:))
do i=1,20
do j=1,20
do k=1,20
if (i.eq.5 .and. j.eq.4 .and. k.eq.3) then
if (any(var1(i)%t3(j)%t2(k)%t1%arr1 .ne. 4)) stop 1
else
if (any(var1(i)%t3(j)%t2(k)%t1%arr1 .ne. 0)) stop 2
end if
end do
if (i.eq.4 .and. j.eq.3) then
if (any(var2%t3(i)%t2(j)%t1%arr1 .ne. 5)) stop 3
else
if (any(var2%t3(i)%t2(j)%t1%arr1 .ne. 0)) stop 4
end if
end do
end do
do i=1,20
allocate(var3%t2(i)%t1%arr1(1:20, 1:20))
var3%t2(i)%t1%arr1(:,:) = 0
end do
!$acc enter data copyin(var3)
!$acc enter data copyin(var3%t2(:))
!$acc enter data copyin(var3%t2(5)%t1)
!$acc data copyin(var3%t2(5)%t1%arr1)
!$acc serial present(var3%t2(5)%t1%arr1)
! { dg-warning "using vector_length \\(32\\), ignoring 1" "" { target openacc_nvidia_accel_selected } .-1 }
var3%t2(5)%t1%arr1(:,:) = 6
!$acc end serial
!$acc update host(var3%t2(5)%t1%arr1)
!$acc end data
!$acc exit data delete(var3%t2(5)%t1)
!$acc exit data delete(var3%t2)
!$acc exit data delete(var3)
do i=1,20
if (i.eq.5) then
if (any(var3%t2(i)%t1%arr1.ne.6)) stop 5
else
if (any(var3%t2(i)%t1%arr1.ne.0)) stop 6
end if
end do
end