1! { dg-do run }
2! { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } }
3
4program main
5  use openacc
6  implicit none
7
8  integer, parameter :: N = 256
9  integer, allocatable :: h(:)
10  integer :: i
11
12  allocate (h(N))
13
14  do i = 1, N
15    h(i) = i
16  end do
17
18  call acc_copyin (h)
19
20  do i = 1, N
21    h(i) = i + i
22  end do
23
24  call acc_update_device (h, sizeof (h))
25
26  if (acc_is_present (h) .neqv. .TRUE.) stop 1
27
28  h(:) = 0
29
30  call acc_copyout (h, sizeof (h))
31
32  do i = 1, N
33    if (h(i) /= i + i) stop 2
34  end do
35
36  call acc_copyin (h, sizeof (h))
37
38  h(:) = 0
39
40  call acc_update_self (h, sizeof (h))
41
42  if (acc_is_present (h) .neqv. .TRUE.) stop 3
43
44  do i = 1, N
45    if (h(i) /= i + i) stop 4
46  end do
47
48  call acc_delete (h)
49
50  if (acc_is_present (h) .neqv. .FALSE.) stop 5
51
52end program
53