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