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