1! { dg-do run }
2! { dg-additional-options "-cpp" }
3
4function is_mapped (n) result (rc)
5  use openacc
6
7  integer, intent (in) :: n
8  logical rc
9
10#if ACC_MEM_SHARED
11  integer i
12
13  rc = .TRUE.
14  i = n
15#else
16  rc = acc_is_present (n, sizeof (n))
17#endif
18
19end function is_mapped
20
21program main
22  integer i, j
23  logical is_mapped
24
25  i = -1
26  j = -2
27
28  !$acc data copyin (i, j)
29    if (is_mapped (i) .eqv. .FALSE.) stop 1
30    if (is_mapped (j) .eqv. .FALSE.) stop 2
31
32    if (i .ne. -1 .or. j .ne. -2) stop 3
33
34    i = 2
35    j = 1
36
37    if (i .ne. 2 .or. j .ne. 1) stop 4
38  !$acc end data
39
40  if (i .ne. 2 .or. j .ne. 1) stop 5
41
42  i = -1
43  j = -2
44
45  !$acc data copyout (i, j)
46    if (is_mapped (i) .eqv. .FALSE.) stop 6
47    if (is_mapped (j) .eqv. .FALSE.) stop 7
48
49    if (i .ne. -1 .or. j .ne. -2) stop 8
50
51    i = 2
52    j = 1
53
54    if (i .ne. 2 .or. j .ne. 1) stop 9
55
56    !$acc parallel present (i, j)
57      i = 4
58      j = 2
59    !$acc end parallel
60  !$acc end data
61
62  if (i .ne. 4 .or. j .ne. 2) stop 10
63
64  i = -1
65  j = -2
66
67  !$acc data create (i, j)
68    if (is_mapped (i) .eqv. .FALSE.) stop 11
69    if (is_mapped (j) .eqv. .FALSE.) stop 12
70
71    if (i .ne. -1 .or. j .ne. -2) stop 13
72
73    i = 2
74    j = 1
75
76    if (i .ne. 2 .or. j .ne. 1) stop 14
77  !$acc end data
78
79  if (i .ne. 2 .or. j .ne. 1) stop 15
80
81  i = -1
82  j = -2
83
84  !$acc data present_or_copyin (i, j)
85    if (is_mapped (i) .eqv. .FALSE.) stop 16
86    if (is_mapped (j) .eqv. .FALSE.) stop 17
87
88    if (i .ne. -1 .or. j .ne. -2) stop 18
89
90    i = 2
91    j = 1
92
93    if (i .ne. 2 .or. j .ne. 1) stop 19
94  !$acc end data
95
96  if (i .ne. 2 .or. j .ne. 1) stop 20
97
98  i = -1
99  j = -2
100
101  !$acc data present_or_copyout (i, j)
102    if (is_mapped (i) .eqv. .FALSE.) stop 21
103    if (is_mapped (j) .eqv. .FALSE.) stop 22
104
105    if (i .ne. -1 .or. j .ne. -2) stop 23
106
107    i = 2
108    j = 1
109
110    if (i .ne. 2 .or. j .ne. 1) stop 24
111
112    !$acc parallel present (i, j)
113      i = 4
114      j = 2
115    !$acc end parallel
116  !$acc end data
117
118  if (i .ne. 4 .or. j .ne. 2) stop 25
119
120  i = -1
121  j = -2
122
123  !$acc data present_or_copy (i, j)
124    if (is_mapped (i) .eqv. .FALSE.) stop 26
125    if (is_mapped (j) .eqv. .FALSE.) stop 27
126
127    if (i .ne. -1 .or. j .ne. -2) stop 28
128
129    i = 2
130    j = 1
131
132    if (i .ne. 2 .or. j .ne. 1) stop 29
133  !$acc end data
134
135#if ACC_MEM_SHARED
136  if (i .ne. 2 .or. j .ne. 1) stop 30
137#else
138  if (i .ne. -1 .or. j .ne. -2) stop 31
139#endif
140
141  i = -1
142  j = -2
143
144  !$acc data present_or_create (i, j)
145    if (is_mapped (i) .eqv. .FALSE.) stop 32
146    if (is_mapped (j) .eqv. .FALSE.) stop 33
147
148    i = 2
149    j = 1
150
151    if (i .ne. 2 .or. j .ne. 1) stop 34
152  !$acc end data
153
154  if (i .ne. 2 .or. j .ne. 1) stop 35
155
156  i = -1
157  j = -2
158
159  !$acc data copyin (i, j)
160    !$acc data present (i, j)
161      if (is_mapped (i) .eqv. .FALSE.) stop 36
162      if (is_mapped (j) .eqv. .FALSE.) stop 37
163
164      if (i .ne. -1 .or. j .ne. -2) stop 38
165
166      i = 2
167      j = 1
168
169      if (i .ne. 2 .or. j .ne. 1) stop 39
170    !$acc end data
171  !$acc end data
172
173  if (i .ne. 2 .or. j .ne. 1) stop 40
174
175  i = -1
176  j = -2
177
178  !$acc data copyin (i, j)
179    !$acc data present (i, j)
180      if (is_mapped (i) .eqv. .FALSE.) stop 41
181      if (is_mapped (j) .eqv. .FALSE.) stop 42
182
183      if (i .ne. -1 .or. j .ne. -2) stop 43
184
185      i = 2
186      j = 1
187
188      if (i .ne. 2 .or. j .ne. 1) stop 44
189    !$acc end data
190  !$acc end data
191
192  if (i .ne. 2 .or. j .ne. 1) stop 45
193
194  i = -1
195  j = -2
196
197  !$acc data
198#if !ACC_MEM_SHARED
199    if (is_mapped (i) .eqv. .TRUE.) stop 46
200    if (is_mapped (j) .eqv. .TRUE.) stop 47
201#endif
202    if (i .ne. -1 .or. j .ne. -2) stop 48
203
204    i = 2
205    j = 1
206
207    if (i .ne. 2 .or. j .ne. 1) stop 49
208  !$acc end data
209
210  if (i .ne. 2 .or. j .ne. 1) stop 50
211
212end program main
213