1! { dg-do run } 2 3type type1 4 integer, allocatable :: arr1(:,:) 5end type type1 6 7type type2 8 type(type1) :: t1 9end type type2 10 11type type3 12 type(type2) :: t2(20) 13end type type3 14 15type type4 16 type(type3), allocatable :: t3(:) 17end type type4 18 19integer :: i, j, k 20 21type(type4), allocatable :: var1(:) 22type(type4) :: var2 23type(type3) :: var3 24 25allocate(var1(1:20)) 26do i=1,20 27 allocate(var1(i)%t3(1:20)) 28 do j=1,20 29 do k=1,20 30 allocate(var1(i)%t3(j)%t2(k)%t1%arr1(1:20,1:20)) 31 end do 32 end do 33end do 34 35allocate(var2%t3(1:20)) 36do i=1,20 37 do j=1,20 38 allocate(var2%t3(i)%t2(j)%t1%arr1(1:20,1:20)) 39 end do 40end do 41 42do i=1,20 43 do j=1,20 44 do k=1,20 45 var1(i)%t3(j)%t2(k)%t1%arr1(:,:) = 0 46 end do 47 var2%t3(i)%t2(j)%t1%arr1(:,:) = 0 48 end do 49end do 50 51!$acc enter data copyin(var2%t3(4)%t2(3)%t1%arr1(:,:)) 52!$acc enter data copyin(var1(5)%t3(4)%t2(3)%t1%arr1(:,:)) 53 54var2%t3(4)%t2(3)%t1%arr1(:,:) = 5 55var1(5)%t3(4)%t2(3)%t1%arr1(:,:) = 4 56 57!$acc update device(var2%t3(4)%t2(3)%t1%arr1) 58!$acc update device(var1(5)%t3(4)%t2(3)%t1%arr1) 59 60!$acc exit data copyout(var1(5)%t3(4)%t2(3)%t1%arr1(:,:)) 61!$acc exit data copyout(var2%t3(4)%t2(3)%t1%arr1(:,:)) 62 63do i=1,20 64 do j=1,20 65 do k=1,20 66 if (i.eq.5 .and. j.eq.4 .and. k.eq.3) then 67 if (any(var1(i)%t3(j)%t2(k)%t1%arr1 .ne. 4)) stop 1 68 else 69 if (any(var1(i)%t3(j)%t2(k)%t1%arr1 .ne. 0)) stop 2 70 end if 71 end do 72 if (i.eq.4 .and. j.eq.3) then 73 if (any(var2%t3(i)%t2(j)%t1%arr1 .ne. 5)) stop 3 74 else 75 if (any(var2%t3(i)%t2(j)%t1%arr1 .ne. 0)) stop 4 76 end if 77 end do 78end do 79 80do i=1,20 81 allocate(var3%t2(i)%t1%arr1(1:20, 1:20)) 82 var3%t2(i)%t1%arr1(:,:) = 0 83end do 84 85!$acc enter data copyin(var3) 86!$acc enter data copyin(var3%t2(:)) 87!$acc enter data copyin(var3%t2(5)%t1) 88!$acc data copyin(var3%t2(5)%t1%arr1) 89 90!$acc serial present(var3%t2(5)%t1%arr1) 91! { dg-warning "using vector_length \\(32\\), ignoring 1" "" { target openacc_nvidia_accel_selected } .-1 } 92var3%t2(5)%t1%arr1(:,:) = 6 93!$acc end serial 94 95!$acc update host(var3%t2(5)%t1%arr1) 96 97!$acc end data 98!$acc exit data delete(var3%t2(5)%t1) 99!$acc exit data delete(var3%t2) 100!$acc exit data delete(var3) 101 102do i=1,20 103 if (i.eq.5) then 104 if (any(var3%t2(i)%t1%arr1.ne.6)) stop 5 105 else 106 if (any(var3%t2(i)%t1%arr1.ne.0)) stop 6 107 end if 108end do 109 110end 111