1 /* { dg-do run } */
2
3 #include <stdlib.h>
4 #include <openacc.h>
5
6 int i;
7
8 int
is_mapped(void * p,size_t n)9 is_mapped (void *p, size_t n)
10 {
11 #if ACC_MEM_SHARED
12 return 1;
13 #else
14 return acc_is_present (p, n);
15 #endif
16 }
17
main(void)18 int main(void)
19 {
20 int j;
21
22 i = -1;
23 j = -2;
24 #pragma acc data copyin (i, j)
25 {
26 if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
27 abort ();
28 if (i != -1 || j != -2)
29 abort ();
30 i = 2;
31 j = 1;
32 if (i != 2 || j != 1)
33 abort ();
34 }
35 if (i != 2 || j != 1)
36 abort ();
37
38 i = -1;
39 j = -2;
40 #pragma acc data copyout (i, j)
41 {
42 if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
43 abort ();
44 if (i != -1 || j != -2)
45 abort ();
46 i = 2;
47 j = 1;
48 if (i != 2 || j != 1)
49 abort ();
50
51 #pragma acc parallel present (i, j)
52 {
53 i = 4;
54 j = 2;
55 }
56 }
57 if (i != 4 || j != 2)
58 abort ();
59
60 i = -1;
61 j = -2;
62 #pragma acc data create (i, j)
63 {
64 if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
65 abort ();
66 if (i != -1 || j != -2)
67 abort ();
68 i = 2;
69 j = 1;
70 if (i != 2 || j != 1)
71 abort ();
72 }
73 if (i != 2 || j != 1)
74 abort ();
75
76 i = -1;
77 j = -2;
78 #pragma acc data present_or_copyin (i, j)
79 {
80 if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
81 abort ();
82 if (i != -1 || j != -2)
83 abort ();
84 i = 2;
85 j = 1;
86 if (i != 2 || j != 1)
87 abort ();
88 }
89 if (i != 2 || j != 1)
90 abort ();
91
92 i = -1;
93 j = -2;
94 #pragma acc data present_or_copyout (i, j)
95 {
96 if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
97 abort ();
98 if (i != -1 || j != -2)
99 abort ();
100 i = 2;
101 j = 1;
102 if (i != 2 || j != 1)
103 abort ();
104
105 #pragma acc parallel present (i, j)
106 {
107 i = 4;
108 j = 2;
109 }
110 }
111 if (i != 4 || j != 2)
112 abort ();
113
114 i = -1;
115 j = -2;
116 #pragma acc data present_or_copy (i, j)
117 {
118 if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
119 abort ();
120 if (i != -1 || j != -2)
121 abort ();
122 i = 2;
123 j = 1;
124 if (i != 2 || j != 1)
125 abort ();
126 }
127 #if ACC_MEM_SHARED
128 if (i != 2 || j != 1)
129 abort ();
130 #else
131 if (i != -1 || j != -2)
132 abort ();
133 #endif
134
135 i = -1;
136 j = -2;
137 #pragma acc data present_or_create (i, j)
138 {
139 if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
140 abort ();
141 i = 2;
142 j = 1;
143 if (i != 2 || j != 1)
144 abort ();
145 }
146
147 if (i != 2 || j != 1)
148 abort ();
149
150 i = -1;
151 j = -2;
152 #pragma acc data copyin (i, j)
153 {
154 #pragma acc data present (i, j)
155 {
156 if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
157 abort ();
158 if (i != -1 || j != -2)
159 abort ();
160 i = 2;
161 j = 1;
162 if (i != 2 || j != 1)
163 abort ();
164 }
165 }
166 if (i != 2 || j != 1)
167 abort ();
168
169 i = -1;
170 j = -2;
171 #pragma acc data
172 {
173 #if !ACC_MEM_SHARED
174 if (is_mapped (&i, sizeof (i)) || is_mapped (&j, sizeof (j)))
175 abort ();
176 #endif
177 if (i != -1 || j != -2)
178 abort ();
179 i = 2;
180 j = 1;
181 if (i != 2 || j != 1)
182 abort ();
183 }
184 if (i != 2 || j != 1)
185 abort ();
186
187 return 0;
188 }
189