1! { dg-do run } 2 3! Test of attach/detach, "enter data" inside "data", and subarray. 4 5program dtype 6 implicit none 7 integer, parameter :: n = 512 8 type mytype 9 integer, allocatable :: a(:) 10 integer, allocatable :: b(:) 11 end type mytype 12 integer i 13 14 type(mytype) :: var 15 16 allocate(var%a(1:n)) 17 allocate(var%b(1:n)) 18 19!$acc data copy(var) 20 21 do i = 1, n 22 var%a(i) = 0 23 var%b(i) = 0 24 end do 25 26!$acc enter data copyin(var%a(5:n - 5), var%b(5:n - 5)) 27 28!$acc parallel loop 29 do i = 5,n - 5 30 var%a(i) = i 31 var%b(i) = i * 2 32 end do 33!$acc end parallel loop 34 35!$acc exit data copyout(var%a(5:n - 5), var%b(5:n - 5)) 36 37!$acc end data 38 39 do i = 1,4 40 if (var%a(i) .ne. 0) stop 1 41 if (var%b(i) .ne. 0) stop 2 42 end do 43 44 do i = 5,n - 5 45 if (i .ne. var%a(i)) stop 3 46 if (i * 2 .ne. var%b(i)) stop 4 47 end do 48 49 do i = n - 4,n 50 if (var%a(i) .ne. 0) stop 5 51 if (var%b(i) .ne. 0) stop 6 52 end do 53 54 deallocate(var%a) 55 deallocate(var%b) 56 57end program dtype 58