1! Test 'allocatable' with OpenACC data clauses.
2
3! See also '../libgomp.fortran/target-allocatable-1-1.f90'.
4
5! { dg-do run }
6! { dg-additional-options "-cpp" }
7
8program main
9  implicit none
10  integer, allocatable :: a, b, c, d, e
11
12  allocate (a)
13  a = 11
14
15  b = 25 ! Implicit allocation.
16
17  c = 52 ! Implicit allocation.
18
19  !No 'allocate (d)' here.
20
21  !No 'allocate (e)' here.
22
23  !$acc parallel copyin(a) copy(b, c, d) copyout(e)
24
25  if (.not. allocated (a)) stop 1
26  if (a .ne. 11) stop 2
27  a = 33
28
29  if (.not. allocated (b)) stop 3
30  if (b .ne. 25) stop 4
31
32  if (.not. allocated (c)) stop 5
33  if (c .ne. 52) stop 6
34  c = 10
35
36  if (allocated (d)) stop 7
37  d = 42 ! Implicit allocation, but on device only.
38  if (.not. allocated (d)) stop 8
39  deallocate (d) ! OpenMP requires must be "unallocated upon exit from the region".
40
41  if (allocated (e)) stop 9
42  e = 24 ! Implicit allocation, but on device only.
43  if (.not. allocated (e)) stop 10
44  deallocate (e) ! OpenMP requires must be "unallocated upon exit from the region".
45
46  !$acc end parallel
47
48  if (.not. allocated (a)) stop 20
49#if ACC_MEM_SHARED
50  if (a .ne. 33) stop 21
51#else
52  if (a .ne. 11) stop 22
53#endif
54  deallocate (a)
55
56  if (.not. allocated (b)) stop 23
57  if (b .ne. 25) stop 24
58  deallocate (b)
59
60  if (.not. allocated (c)) stop 25
61  if (c .ne. 10) stop 26
62  deallocate (c)
63
64  if (allocated (d)) stop 27
65
66  if (allocated (e)) stop 28
67
68end program main
69