1! { dg-do run }
2
3program myprog
4
5  type mytype
6    integer, allocatable :: myarr(:,:)
7  end type mytype
8  integer :: i
9
10  type(mytype), allocatable :: typearr(:)
11
12  allocate(typearr(1:100))
13
14  do i=1,100
15    allocate(typearr(i)%myarr(1:100,1:100))
16  end do
17
18  do i=1,100
19    typearr(i)%myarr(:,:) = 0
20  end do
21
22  !$acc enter data copyin(typearr)
23
24  do i=1,100
25    !$acc enter data copyin(typearr(i)%myarr)
26  end do
27
28  i=33
29  typearr(i)%myarr(:,:) = 50
30
31  !$acc update device(typearr(i)%myarr(:,:))
32
33  do i=1,100
34    !$acc exit data copyout(typearr(i)%myarr)
35  end do
36
37  !$acc exit data delete(typearr)
38
39  do i=1,100
40    if (i.eq.33) then
41      if (any(typearr(i)%myarr.ne.50)) stop 1
42    else
43      if (any(typearr(i)%myarr.ne.0)) stop 2
44    end if
45  end do
46
47  do i=1,100
48    deallocate(typearr(i)%myarr)
49  end do
50
51  deallocate(typearr)
52
53end program myprog
54