1 // expected-no-diagnostics
2 #ifndef HEADER
3 #define HEADER
4 
5 // RUN: %clang_cc1 -DOMP45 -verify -fopenmp -fopenmp-version=45 -ast-print %s | FileCheck %s --check-prefix=OMP45
6 // RUN: %clang_cc1 -DOMP45 -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -emit-pch -o %t %s
7 // RUN: %clang_cc1 -DOMP45 -fopenmp -fopenmp-version=45 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s --check-prefix=OMP45
8 
9 // RUN: %clang_cc1 -DOMP45 -verify -fopenmp-simd -fopenmp-version=45 -ast-print %s | FileCheck %s --check-prefix=OMP45
10 // RUN: %clang_cc1 -DOMP45 -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -emit-pch -o %t %s
11 // RUN: %clang_cc1 -DOMP45 -fopenmp-simd -fopenmp-version=45 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s --check-prefix=OMP45
12 #ifdef OMP45
13 
14 void foo() {}
15 
16 template <typename T, int C>
17 T tmain(T argc, T *argv) {
18   T i, j, a[20], always, close;
19 #pragma omp target
20   foo();
21 #pragma omp target if (target:argc > 0)
22   foo();
23 #pragma omp target if (C)
24   foo();
25 #pragma omp target map(i)
26   foo();
27 #pragma omp target map(a[0:10], i)
28   foo();
29 #pragma omp target map(to: i) map(from: j)
30   foo();
31 #pragma omp target map(always,alloc: i)
32   foo();
33 #pragma omp target map(always from: i)
34   foo();
35 #pragma omp target map(always)
36   {always++;}
37 #pragma omp target map(always,i)
38   {always++;i++;}
39 #pragma omp target map(close,alloc: i)
40   foo();
41 #pragma omp target map(close from: i)
42   foo();
43 #pragma omp target map(close)
44   {close++;}
45 #pragma omp target map(close,i)
46   {close++;i++;}
47 #pragma omp target nowait
48   foo();
49 #pragma omp target depend(in : argc, argv[i:argc], a[:])
50   foo();
51 #pragma omp target defaultmap(tofrom: scalar)
52   foo();
53   return 0;
54 }
55 
56 // OMP45: template <typename T, int C> T tmain(T argc, T *argv) {
57 // OMP45-NEXT: T i, j, a[20]
58 // OMP45-NEXT: #pragma omp target{{$}}
59 // OMP45-NEXT: foo();
60 // OMP45-NEXT: #pragma omp target if(target: argc > 0)
61 // OMP45-NEXT: foo()
62 // OMP45-NEXT: #pragma omp target if(C)
63 // OMP45-NEXT: foo()
64 // OMP45-NEXT: #pragma omp target map(tofrom: i)
65 // OMP45-NEXT: foo()
66 // OMP45-NEXT: #pragma omp target map(tofrom: a[0:10],i)
67 // OMP45-NEXT: foo()
68 // OMP45-NEXT: #pragma omp target map(to: i) map(from: j)
69 // OMP45-NEXT: foo()
70 // OMP45-NEXT: #pragma omp target map(always,alloc: i)
71 // OMP45-NEXT: foo()
72 // OMP45-NEXT: #pragma omp target map(always,from: i)
73 // OMP45-NEXT: foo()
74 // OMP45-NEXT: #pragma omp target map(tofrom: always)
75 // OMP45-NEXT: {
76 // OMP45-NEXT: always++;
77 // OMP45-NEXT: }
78 // OMP45-NEXT: #pragma omp target map(tofrom: always,i)
79 // OMP45-NEXT: {
80 // OMP45-NEXT: always++;
81 // OMP45-NEXT: i++;
82 // OMP45-NEXT: }
83 // OMP45-NEXT: #pragma omp target map(close,alloc: i)
84 // OMP45-NEXT: foo()
85 // OMP45-NEXT: #pragma omp target map(close,from: i)
86 // OMP45-NEXT: foo()
87 // OMP45-NEXT: #pragma omp target map(tofrom: close)
88 // OMP45-NEXT: {
89 // OMP45-NEXT: close++;
90 // OMP45-NEXT: }
91 // OMP45-NEXT: #pragma omp target map(tofrom: close,i)
92 // OMP45-NEXT: {
93 // OMP45-NEXT: close++;
94 // OMP45-NEXT: i++;
95 // OMP45-NEXT: }
96 // OMP45-NEXT: #pragma omp target nowait
97 // OMP45-NEXT: foo()
98 // OMP45-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:])
99 // OMP45-NEXT: foo()
100 // OMP45-NEXT: #pragma omp target defaultmap(tofrom: scalar)
101 // OMP45-NEXT: foo()
102 // OMP45: template<> int tmain<int, 5>(int argc, int *argv) {
103 // OMP45-NEXT: int i, j, a[20]
104 // OMP45-NEXT: #pragma omp target
105 // OMP45-NEXT: foo();
106 // OMP45-NEXT: #pragma omp target if(target: argc > 0)
107 // OMP45-NEXT: foo()
108 // OMP45-NEXT: #pragma omp target if(5)
109 // OMP45-NEXT: foo()
110 // OMP45-NEXT: #pragma omp target map(tofrom: i)
111 // OMP45-NEXT: foo()
112 // OMP45-NEXT: #pragma omp target map(tofrom: a[0:10],i)
113 // OMP45-NEXT: foo()
114 // OMP45-NEXT: #pragma omp target map(to: i) map(from: j)
115 // OMP45-NEXT: foo()
116 // OMP45-NEXT: #pragma omp target map(always,alloc: i)
117 // OMP45-NEXT: foo()
118 // OMP45-NEXT: #pragma omp target map(always,from: i)
119 // OMP45-NEXT: foo()
120 // OMP45-NEXT: #pragma omp target map(tofrom: always)
121 // OMP45-NEXT: {
122 // OMP45-NEXT: always++;
123 // OMP45-NEXT: }
124 // OMP45-NEXT: #pragma omp target map(tofrom: always,i)
125 // OMP45-NEXT: {
126 // OMP45-NEXT: always++;
127 // OMP45-NEXT: i++;
128 // OMP45-NEXT: }
129 // OMP45-NEXT: #pragma omp target map(close,alloc: i)
130 // OMP45-NEXT: foo()
131 // OMP45-NEXT: #pragma omp target map(close,from: i)
132 // OMP45-NEXT: foo()
133 // OMP45-NEXT: #pragma omp target map(tofrom: close)
134 // OMP45-NEXT: {
135 // OMP45-NEXT: close++;
136 // OMP45-NEXT: }
137 // OMP45-NEXT: #pragma omp target map(tofrom: close,i)
138 // OMP45-NEXT: {
139 // OMP45-NEXT: close++;
140 // OMP45-NEXT: i++;
141 // OMP45-NEXT: }
142 // OMP45-NEXT: #pragma omp target nowait
143 // OMP45-NEXT: foo()
144 // OMP45-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:])
145 // OMP45-NEXT: foo()
146 // OMP45-NEXT: #pragma omp target defaultmap(tofrom: scalar)
147 // OMP45-NEXT: foo()
148 // OMP45: template<> char tmain<char, 1>(char argc, char *argv) {
149 // OMP45-NEXT: char i, j, a[20]
150 // OMP45-NEXT: #pragma omp target
151 // OMP45-NEXT: foo();
152 // OMP45-NEXT: #pragma omp target if(target: argc > 0)
153 // OMP45-NEXT: foo()
154 // OMP45-NEXT: #pragma omp target if(1)
155 // OMP45-NEXT: foo()
156 // OMP45-NEXT: #pragma omp target map(tofrom: i)
157 // OMP45-NEXT: foo()
158 // OMP45-NEXT: #pragma omp target map(tofrom: a[0:10],i)
159 // OMP45-NEXT: foo()
160 // OMP45-NEXT: #pragma omp target map(to: i) map(from: j)
161 // OMP45-NEXT: foo()
162 // OMP45-NEXT: #pragma omp target map(always,alloc: i)
163 // OMP45-NEXT: foo()
164 // OMP45-NEXT: #pragma omp target map(always,from: i)
165 // OMP45-NEXT: foo()
166 // OMP45-NEXT: #pragma omp target map(tofrom: always)
167 // OMP45-NEXT: {
168 // OMP45-NEXT: always++;
169 // OMP45-NEXT: }
170 // OMP45-NEXT: #pragma omp target map(tofrom: always,i)
171 // OMP45-NEXT: {
172 // OMP45-NEXT: always++;
173 // OMP45-NEXT: i++;
174 // OMP45-NEXT: }
175 // OMP45-NEXT: #pragma omp target map(close,alloc: i)
176 // OMP45-NEXT: foo()
177 // OMP45-NEXT: #pragma omp target map(close,from: i)
178 // OMP45-NEXT: foo()
179 // OMP45-NEXT: #pragma omp target map(tofrom: close)
180 // OMP45-NEXT: {
181 // OMP45-NEXT: close++;
182 // OMP45-NEXT: }
183 // OMP45-NEXT: #pragma omp target map(tofrom: close,i)
184 // OMP45-NEXT: {
185 // OMP45-NEXT: close++;
186 // OMP45-NEXT: i++;
187 // OMP45-NEXT: }
188 // OMP45-NEXT: #pragma omp target nowait
189 // OMP45-NEXT: foo()
190 // OMP45-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:])
191 // OMP45-NEXT: foo()
192 // OMP45-NEXT: #pragma omp target defaultmap(tofrom: scalar)
193 // OMP45-NEXT: foo()
194 
195 // OMP45-LABEL: class S {
196 class S {
197   void foo() {
198 // OMP45-NEXT: void foo() {
199     int a = 0;
200 // OMP45-NEXT: int a = 0;
201     #pragma omp target map(this[0])
202 // OMP45-NEXT: #pragma omp target map(tofrom: this[0])
203       a++;
204 // OMP45-NEXT: a++;
205     #pragma omp target map(this[:1])
206 // OMP45-NEXT: #pragma omp target map(tofrom: this[:1])
207       a++;
208 // OMP45-NEXT: a++;
209     #pragma omp target map((this)[0])
210 // OMP45-NEXT: #pragma omp target map(tofrom: (this)[0])
211       a++;
212 // OMP45-NEXT: a++;
213     #pragma omp target map(this[:a])
214 // OMP45-NEXT: #pragma omp target map(tofrom: this[:a])
215       a++;
216 // OMP45-NEXT: a++;
217     #pragma omp target map(this[a:1])
218 // OMP45-NEXT: #pragma omp target map(tofrom: this[a:1])
219       a++;
220 // OMP45-NEXT: a++;
221     #pragma omp target map(this[a])
222 // OMP45-NEXT: #pragma omp target map(tofrom: this[a])
223       a++;
224 // OMP45-NEXT: a++;
225   }
226 // OMP45-NEXT: }
227 };
228 // OMP45-NEXT: };
229 
230 // OMP45-LABEL: int main(int argc, char **argv) {
231 int main (int argc, char **argv) {
232   int i, j, a[20], always, close;
233 // OMP45-NEXT: int i, j, a[20]
234 #pragma omp target
235 // OMP45-NEXT: #pragma omp target
236   foo();
237 // OMP45-NEXT: foo();
238 #pragma omp target if (argc > 0)
239 // OMP45-NEXT: #pragma omp target if(argc > 0)
240   foo();
241 // OMP45-NEXT: foo();
242 
243 #pragma omp target map(i) if(argc>0)
244 // OMP45-NEXT: #pragma omp target map(tofrom: i) if(argc > 0)
245   foo();
246 // OMP45-NEXT: foo();
247 
248 #pragma omp target map(i)
249 // OMP45-NEXT: #pragma omp target map(tofrom: i)
250   foo();
251 // OMP45-NEXT: foo();
252 
253 #pragma omp target map(a[0:10], i)
254 // OMP45-NEXT: #pragma omp target map(tofrom: a[0:10],i)
255   foo();
256 // OMP45-NEXT: foo();
257 
258 #pragma omp target map(to: i) map(from: j)
259 // OMP45-NEXT: #pragma omp target map(to: i) map(from: j)
260   foo();
261 // OMP45-NEXT: foo();
262 
263 #pragma omp target map(always,alloc: i)
264 // OMP45-NEXT: #pragma omp target map(always,alloc: i)
265   foo();
266 // OMP45-NEXT: foo();
267 
268 #pragma omp target map(always from: i)
269 // OMP45-NEXT: #pragma omp target map(always,from: i)
270   foo();
271 // OMP45-NEXT: foo();
272 
273 #pragma omp target map(always)
274 // OMP45-NEXT: #pragma omp target map(tofrom: always)
275   {always++;}
276 // OMP45-NEXT: {
277 // OMP45-NEXT: always++;
278 // OMP45-NEXT: }
279 
280 #pragma omp target map(always,i)
281 // OMP45-NEXT: #pragma omp target map(tofrom: always,i)
282   {always++;i++;}
283 // OMP45-NEXT: {
284 // OMP45-NEXT: always++;
285 // OMP45-NEXT: i++;
286 // OMP45-NEXT: }
287 
288 #pragma omp target map(close,alloc: i)
289 // OMP45-NEXT: #pragma omp target map(close,alloc: i)
290   foo();
291 // OMP45-NEXT: foo();
292 
293 #pragma omp target map(close from: i)
294 // OMP45-NEXT: #pragma omp target map(close,from: i)
295   foo();
296 // OMP45-NEXT: foo();
297 
298 #pragma omp target map(close)
299 // OMP45-NEXT: #pragma omp target map(tofrom: close)
300   {close++;}
301 // OMP45-NEXT: {
302 // OMP45-NEXT: close++;
303 // OMP45-NEXT: }
304 
305 #pragma omp target map(close,i)
306 // OMP45-NEXT: #pragma omp target map(tofrom: close,i)
307   {close++;i++;}
308 // OMP45-NEXT: {
309 // OMP45-NEXT: close++;
310 // OMP45-NEXT: i++;
311 // OMP45-NEXT: }
312 
313 #pragma omp target nowait
314 // OMP45-NEXT: #pragma omp target nowait
315   foo();
316 // OMP45-NEXT: foo();
317 
318 #pragma omp target depend(in : argc, argv[i:argc], a[:])
319 // OMP45-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:])
320   foo();
321 // OMP45-NEXT: foo();
322 
323 #pragma omp target defaultmap(tofrom: scalar)
324 // OMP45-NEXT: #pragma omp target defaultmap(tofrom: scalar)
325   foo();
326 // OMP45-NEXT: foo();
327 
328   return tmain<int, 5>(argc, &argc) + tmain<char, 1>(argv[0][0], argv[0]);
329 }
330 
331 #endif
332 
333 #ifdef OMP5
334 
335 ///==========================================================================///
336 // RUN: %clang_cc1 -DOMP5 -verify -fopenmp -fopenmp-version=50 -ast-print %s | FileCheck %s --check-prefix OMP5
337 // RUN: %clang_cc1 -DOMP5 -fopenmp -fopenmp-version=50 -x c++ -std=c++11 -emit-pch -o %t %s
338 // RUN: %clang_cc1 -DOMP5 -fopenmp -fopenmp-version=50 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s --check-prefix OMP5
339 
340 // RUN: %clang_cc1 -DOMP5 -verify -fopenmp-simd -fopenmp-version=50 -ast-print %s | FileCheck %s --check-prefix OMP5
341 // RUN: %clang_cc1 -DOMP5 -fopenmp-simd -fopenmp-version=50 -x c++ -std=c++11 -emit-pch -o %t %s
342 // RUN: %clang_cc1 -DOMP5 -fopenmp-simd -fopenmp-version=50 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s --check-prefix OMP5
343 
344 void foo() {}
345 
346 #pragma omp declare target
347 void bar() {}
348 #pragma omp end declare target
349 
350 int a;
351 #pragma omp declare target link(a)
352 
353 template <typename T, int C>
354 T tmain(T argc, T *argv) {
355   T i, j, a[20], always, close;
356 #pragma omp target
357   foo();
358 #pragma omp target if (target:argc > 0)
359   foo();
360 #pragma omp target if (C)
361   foo();
362 #pragma omp target map(i)
363   foo();
364 #pragma omp target map(a[0:10], i)
365   foo();
366 #pragma omp target map(to: i) map(from: j)
367   foo();
368 #pragma omp target map(always,alloc: i)
369   foo();
370 #pragma omp target map(always from: i)
371   foo();
372 #pragma omp target map(always)
373   {always++;}
374 #pragma omp target map(always,i)
375   {always++;i++;}
376 #pragma omp target map(close,alloc: i)
377   foo();
378 #pragma omp target map(close from: i)
379   foo();
380 #pragma omp target map(close)
381   {close++;}
382 #pragma omp target map(close,i)
383   {close++;i++;}
384 #pragma omp target nowait
385   foo();
386 #pragma omp target depend(in : argc, argv[i:argc], a[:])
387   foo();
388 #pragma omp target defaultmap(alloc: scalar)
389   foo();
390 #pragma omp target defaultmap(to: scalar)
391   foo();
392 #pragma omp target defaultmap(from: scalar)
393   foo();
394 #pragma omp target defaultmap(tofrom: scalar)
395   foo();
396 #pragma omp target defaultmap(firstprivate: scalar)
397   foo();
398 #pragma omp target defaultmap(none: scalar)
399   foo();
400 #pragma omp target defaultmap(default: scalar)
401   foo();
402 #pragma omp target defaultmap(alloc: aggregate)
403   foo();
404 #pragma omp target defaultmap(to: aggregate)
405   foo();
406 #pragma omp target defaultmap(from: aggregate)
407   foo();
408 #pragma omp target defaultmap(tofrom: aggregate)
409   foo();
410 #pragma omp target defaultmap(firstprivate: aggregate)
411   foo();
412 #pragma omp target defaultmap(none: aggregate)
413   foo();
414 #pragma omp target defaultmap(default: aggregate)
415   foo();
416 #pragma omp target defaultmap(alloc: pointer)
417   foo();
418 #pragma omp target defaultmap(to: pointer)
419   foo();
420 #pragma omp target defaultmap(from: pointer)
421   foo();
422 #pragma omp target defaultmap(tofrom: pointer)
423   foo();
424 #pragma omp target defaultmap(firstprivate: pointer)
425   foo();
426 #pragma omp target defaultmap(none: pointer)
427   foo();
428 #pragma omp target defaultmap(default: pointer)
429   foo();
430 #pragma omp target defaultmap(to: scalar) defaultmap(tofrom: pointer)
431   foo();
432 #pragma omp target defaultmap(from: pointer) defaultmap(none: aggregate)
433   foo();
434 #pragma omp target defaultmap(default: aggregate) defaultmap(alloc: scalar)
435   foo();
436 #pragma omp target defaultmap(alloc: aggregate) defaultmap(firstprivate: scalar) defaultmap(tofrom: pointer)
437   foo();
438 #pragma omp target defaultmap(tofrom: aggregate) defaultmap(to: pointer) defaultmap(alloc: scalar)
439   foo();
440 
441   int *g;
442 
443 #pragma omp target is_device_ptr(g) defaultmap(none: pointer)
444   g++;
445 #pragma omp target private(g) defaultmap(none: pointer)
446   g++;
447 #pragma omp target firstprivate(g) defaultmap(none: pointer)
448   g++;
449 #pragma omp target defaultmap(none: scalar) map(to: i)
450   i++;
451 #pragma omp target defaultmap(none: aggregate) map(to: a)
452   a[3]++;
453 #pragma omp target defaultmap(none: scalar)
454   bar();
455 
456   return 0;
457 }
458 
459 // OMP5: template <typename T, int C> T tmain(T argc, T *argv) {
460 // OMP5-NEXT: T i, j, a[20]
461 // OMP5-NEXT: #pragma omp target{{$}}
462 // OMP5-NEXT: foo();
463 // OMP5-NEXT: #pragma omp target if(target: argc > 0)
464 // OMP5-NEXT: foo()
465 // OMP5-NEXT: #pragma omp target if(C)
466 // OMP5-NEXT: foo()
467 // OMP5-NEXT: #pragma omp target map(tofrom: i)
468 // OMP5-NEXT: foo()
469 // OMP5-NEXT: #pragma omp target map(tofrom: a[0:10],i)
470 // OMP5-NEXT: foo()
471 // OMP5-NEXT: #pragma omp target map(to: i) map(from: j)
472 // OMP5-NEXT: foo()
473 // OMP5-NEXT: #pragma omp target map(always,alloc: i)
474 // OMP5-NEXT: foo()
475 // OMP5-NEXT: #pragma omp target map(always,from: i)
476 // OMP5-NEXT: foo()
477 // OMP5-NEXT: #pragma omp target map(tofrom: always)
478 // OMP5-NEXT: {
479 // OMP5-NEXT: always++;
480 // OMP5-NEXT: }
481 // OMP5-NEXT: #pragma omp target map(tofrom: always,i)
482 // OMP5-NEXT: {
483 // OMP5-NEXT: always++;
484 // OMP5-NEXT: i++;
485 // OMP5-NEXT: }
486 // OMP5-NEXT: #pragma omp target map(close,alloc: i)
487 // OMP5-NEXT: foo()
488 // OMP5-NEXT: #pragma omp target map(close,from: i)
489 // OMP5-NEXT: foo()
490 // OMP5-NEXT: #pragma omp target map(tofrom: close)
491 // OMP5-NEXT: {
492 // OMP5-NEXT: close++;
493 // OMP5-NEXT: }
494 // OMP5-NEXT: #pragma omp target map(tofrom: close,i)
495 // OMP5-NEXT: {
496 // OMP5-NEXT: close++;
497 // OMP5-NEXT: i++;
498 // OMP5-NEXT: }
499 // OMP5-NEXT: #pragma omp target nowait
500 // OMP5-NEXT: foo()
501 // OMP5-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:])
502 // OMP5-NEXT: foo()
503 // OMP5-NEXT: #pragma omp target defaultmap(alloc: scalar)
504 // OMP5-NEXT: foo()
505 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar)
506 // OMP5-NEXT: foo()
507 // OMP5-NEXT: #pragma omp target defaultmap(from: scalar)
508 // OMP5-NEXT: foo()
509 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: scalar)
510 // OMP5-NEXT: foo()
511 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: scalar)
512 // OMP5-NEXT: foo()
513 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar)
514 // OMP5-NEXT: foo()
515 // OMP5-NEXT: #pragma omp target defaultmap(default: scalar)
516 // OMP5-NEXT: foo()
517 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate)
518 // OMP5-NEXT: foo()
519 // OMP5-NEXT: #pragma omp target defaultmap(to: aggregate)
520 // OMP5-NEXT: foo()
521 // OMP5-NEXT: #pragma omp target defaultmap(from: aggregate)
522 // OMP5-NEXT: foo()
523 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate)
524 // OMP5-NEXT: foo()
525 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: aggregate)
526 // OMP5-NEXT: foo()
527 // OMP5-NEXT: #pragma omp target defaultmap(none: aggregate)
528 // OMP5-NEXT: foo()
529 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate)
530 // OMP5-NEXT: foo()
531 // OMP5-NEXT: #pragma omp target defaultmap(alloc: pointer)
532 // OMP5-NEXT: foo()
533 // OMP5-NEXT: #pragma omp target defaultmap(to: pointer)
534 // OMP5-NEXT: foo()
535 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer)
536 // OMP5-NEXT: foo()
537 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: pointer)
538 // OMP5-NEXT: foo()
539 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: pointer)
540 // OMP5-NEXT: foo()
541 // OMP5-NEXT: #pragma omp target defaultmap(none: pointer)
542 // OMP5-NEXT: foo()
543 // OMP5-NEXT: #pragma omp target defaultmap(default: pointer)
544 // OMP5-NEXT: foo()
545 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar) defaultmap(tofrom: pointer)
546 // OMP5-NEXT: foo()
547 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer) defaultmap(none: aggregate)
548 // OMP5-NEXT: foo()
549 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate) defaultmap(alloc: scalar)
550 // OMP5-NEXT: foo()
551 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate) defaultmap(firstprivate: scalar) defaultmap(tofrom: pointer)
552 // OMP5-NEXT: foo()
553 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate) defaultmap(to: pointer) defaultmap(alloc: scalar)
554 // OMP5-NEXT: foo()
555 // OMP5: template<> int tmain<int, 5>(int argc, int *argv) {
556 // OMP5-NEXT: int i, j, a[20]
557 // OMP5-NEXT: #pragma omp target
558 // OMP5-NEXT: foo();
559 // OMP5-NEXT: #pragma omp target if(target: argc > 0)
560 // OMP5-NEXT: foo()
561 // OMP5-NEXT: #pragma omp target if(5)
562 // OMP5-NEXT: foo()
563 // OMP5-NEXT: #pragma omp target map(tofrom: i)
564 // OMP5-NEXT: foo()
565 // OMP5-NEXT: #pragma omp target map(tofrom: a[0:10],i)
566 // OMP5-NEXT: foo()
567 // OMP5-NEXT: #pragma omp target map(to: i) map(from: j)
568 // OMP5-NEXT: foo()
569 // OMP5-NEXT: #pragma omp target map(always,alloc: i)
570 // OMP5-NEXT: foo()
571 // OMP5-NEXT: #pragma omp target map(always,from: i)
572 // OMP5-NEXT: foo()
573 // OMP5-NEXT: #pragma omp target map(tofrom: always)
574 // OMP5-NEXT: {
575 // OMP5-NEXT: always++;
576 // OMP5-NEXT: }
577 // OMP5-NEXT: #pragma omp target map(tofrom: always,i)
578 // OMP5-NEXT: {
579 // OMP5-NEXT: always++;
580 // OMP5-NEXT: i++;
581 // OMP5-NEXT: }
582 // OMP5-NEXT: #pragma omp target map(close,alloc: i)
583 // OMP5-NEXT: foo()
584 // OMP5-NEXT: #pragma omp target map(close,from: i)
585 // OMP5-NEXT: foo()
586 // OMP5-NEXT: #pragma omp target map(tofrom: close)
587 // OMP5-NEXT: {
588 // OMP5-NEXT: close++;
589 // OMP5-NEXT: }
590 // OMP5-NEXT: #pragma omp target map(tofrom: close,i)
591 // OMP5-NEXT: {
592 // OMP5-NEXT: close++;
593 // OMP5-NEXT: i++;
594 // OMP5-NEXT: }
595 // OMP5-NEXT: #pragma omp target nowait
596 // OMP5-NEXT: foo()
597 // OMP5-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:])
598 // OMP5-NEXT: foo()
599 // OMP5-NEXT: #pragma omp target defaultmap(alloc: scalar)
600 // OMP5-NEXT: foo()
601 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar)
602 // OMP5-NEXT: foo()
603 // OMP5-NEXT: #pragma omp target defaultmap(from: scalar)
604 // OMP5-NEXT: foo()
605 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: scalar)
606 // OMP5-NEXT: foo()
607 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: scalar)
608 // OMP5-NEXT: foo()
609 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar)
610 // OMP5-NEXT: foo()
611 // OMP5-NEXT: #pragma omp target defaultmap(default: scalar)
612 // OMP5-NEXT: foo()
613 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate)
614 // OMP5-NEXT: foo()
615 // OMP5-NEXT: #pragma omp target defaultmap(to: aggregate)
616 // OMP5-NEXT: foo()
617 // OMP5-NEXT: #pragma omp target defaultmap(from: aggregate)
618 // OMP5-NEXT: foo()
619 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate)
620 // OMP5-NEXT: foo()
621 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: aggregate)
622 // OMP5-NEXT: foo()
623 // OMP5-NEXT: #pragma omp target defaultmap(none: aggregate)
624 // OMP5-NEXT: foo()
625 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate)
626 // OMP5-NEXT: foo()
627 // OMP5-NEXT: #pragma omp target defaultmap(alloc: pointer)
628 // OMP5-NEXT: foo()
629 // OMP5-NEXT: #pragma omp target defaultmap(to: pointer)
630 // OMP5-NEXT: foo()
631 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer)
632 // OMP5-NEXT: foo()
633 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: pointer)
634 // OMP5-NEXT: foo()
635 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: pointer)
636 // OMP5-NEXT: foo()
637 // OMP5-NEXT: #pragma omp target defaultmap(none: pointer)
638 // OMP5-NEXT: foo()
639 // OMP5-NEXT: #pragma omp target defaultmap(default: pointer)
640 // OMP5-NEXT: foo()
641 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar) defaultmap(tofrom: pointer)
642 // OMP5-NEXT: foo()
643 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer) defaultmap(none: aggregate)
644 // OMP5-NEXT: foo()
645 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate) defaultmap(alloc: scalar)
646 // OMP5-NEXT: foo()
647 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate) defaultmap(firstprivate: scalar) defaultmap(tofrom: pointer)
648 // OMP5-NEXT: foo()
649 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate) defaultmap(to: pointer) defaultmap(alloc: scalar)
650 // OMP5-NEXT: foo()
651 // OMP5: template<> char tmain<char, 1>(char argc, char *argv) {
652 // OMP5-NEXT: char i, j, a[20]
653 // OMP5-NEXT: #pragma omp target
654 // OMP5-NEXT: foo();
655 // OMP5-NEXT: #pragma omp target if(target: argc > 0)
656 // OMP5-NEXT: foo()
657 // OMP5-NEXT: #pragma omp target if(1)
658 // OMP5-NEXT: foo()
659 // OMP5-NEXT: #pragma omp target map(tofrom: i)
660 // OMP5-NEXT: foo()
661 // OMP5-NEXT: #pragma omp target map(tofrom: a[0:10],i)
662 // OMP5-NEXT: foo()
663 // OMP5-NEXT: #pragma omp target map(to: i) map(from: j)
664 // OMP5-NEXT: foo()
665 // OMP5-NEXT: #pragma omp target map(always,alloc: i)
666 // OMP5-NEXT: foo()
667 // OMP5-NEXT: #pragma omp target map(always,from: i)
668 // OMP5-NEXT: foo()
669 // OMP5-NEXT: #pragma omp target map(tofrom: always)
670 // OMP5-NEXT: {
671 // OMP5-NEXT: always++;
672 // OMP5-NEXT: }
673 // OMP5-NEXT: #pragma omp target map(tofrom: always,i)
674 // OMP5-NEXT: {
675 // OMP5-NEXT: always++;
676 // OMP5-NEXT: i++;
677 // OMP5-NEXT: }
678 // OMP5-NEXT: #pragma omp target map(close,alloc: i)
679 // OMP5-NEXT: foo()
680 // OMP5-NEXT: #pragma omp target map(close,from: i)
681 // OMP5-NEXT: foo()
682 // OMP5-NEXT: #pragma omp target map(tofrom: close)
683 // OMP5-NEXT: {
684 // OMP5-NEXT: close++;
685 // OMP5-NEXT: }
686 // OMP5-NEXT: #pragma omp target map(tofrom: close,i)
687 // OMP5-NEXT: {
688 // OMP5-NEXT: close++;
689 // OMP5-NEXT: i++;
690 // OMP5-NEXT: }
691 // OMP5-NEXT: #pragma omp target nowait
692 // OMP5-NEXT: foo()
693 // OMP5-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:])
694 // OMP5-NEXT: foo()
695 // OMP5-NEXT: #pragma omp target defaultmap(alloc: scalar)
696 // OMP5-NEXT: foo()
697 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar)
698 // OMP5-NEXT: foo()
699 // OMP5-NEXT: #pragma omp target defaultmap(from: scalar)
700 // OMP5-NEXT: foo()
701 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: scalar)
702 // OMP5-NEXT: foo()
703 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: scalar)
704 // OMP5-NEXT: foo()
705 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar)
706 // OMP5-NEXT: foo()
707 // OMP5-NEXT: #pragma omp target defaultmap(default: scalar)
708 // OMP5-NEXT: foo()
709 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate)
710 // OMP5-NEXT: foo()
711 // OMP5-NEXT: #pragma omp target defaultmap(to: aggregate)
712 // OMP5-NEXT: foo()
713 // OMP5-NEXT: #pragma omp target defaultmap(from: aggregate)
714 // OMP5-NEXT: foo()
715 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate)
716 // OMP5-NEXT: foo()
717 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: aggregate)
718 // OMP5-NEXT: foo()
719 // OMP5-NEXT: #pragma omp target defaultmap(none: aggregate)
720 // OMP5-NEXT: foo()
721 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate)
722 // OMP5-NEXT: foo()
723 // OMP5-NEXT: #pragma omp target defaultmap(alloc: pointer)
724 // OMP5-NEXT: foo()
725 // OMP5-NEXT: #pragma omp target defaultmap(to: pointer)
726 // OMP5-NEXT: foo()
727 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer)
728 // OMP5-NEXT: foo()
729 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: pointer)
730 // OMP5-NEXT: foo()
731 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: pointer)
732 // OMP5-NEXT: foo()
733 // OMP5-NEXT: #pragma omp target defaultmap(none: pointer)
734 // OMP5-NEXT: foo()
735 // OMP5-NEXT: #pragma omp target defaultmap(default: pointer)
736 // OMP5-NEXT: foo()
737 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar) defaultmap(tofrom: pointer)
738 // OMP5-NEXT: foo()
739 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer) defaultmap(none: aggregate)
740 // OMP5-NEXT: foo()
741 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate) defaultmap(alloc: scalar)
742 // OMP5-NEXT: foo()
743 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate) defaultmap(firstprivate: scalar) defaultmap(tofrom: pointer)
744 // OMP5-NEXT: foo()
745 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate) defaultmap(to: pointer) defaultmap(alloc: scalar)
746 // OMP5-NEXT: foo()
747 // OMP5-NEXT: int *g;
748 // OMP5-NEXT: #pragma omp target is_device_ptr(g) defaultmap(none: pointer)
749 // OMP5-NEXT: g++;
750 // OMP5-NEXT: #pragma omp target private(g) defaultmap(none: pointer)
751 // OMP5-NEXT: g++;
752 // OMP5-NEXT: #pragma omp target firstprivate(g) defaultmap(none: pointer)
753 // OMP5-NEXT: g++;
754 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar) map(to: i)
755 // OMP5-NEXT: i++;
756 // OMP5-NEXT: #pragma omp target defaultmap(none: aggregate) map(to: a)
757 // OMP5-NEXT: a[3]++;
758 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar)
759 // OMP5-NEXT: bar();
760 
761 // OMP5-LABEL: class S {
762 class S {
763   void foo() {
764 // OMP5-NEXT: void foo() {
765     int a = 0;
766 // OMP5-NEXT: int a = 0;
767     #pragma omp target map(this[0])
768 // OMP5-NEXT: #pragma omp target map(tofrom: this[0])
769       a++;
770 // OMP5-NEXT: a++;
771     #pragma omp target map(this[:1])
772 // OMP5-NEXT: #pragma omp target map(tofrom: this[:1])
773       a++;
774 // OMP5-NEXT: a++;
775     #pragma omp target map((this)[0])
776 // OMP5-NEXT: #pragma omp target map(tofrom: (this)[0])
777       a++;
778 // OMP5-NEXT: a++;
779     #pragma omp target map(this[:a])
780 // OMP5-NEXT: #pragma omp target map(tofrom: this[:a])
781       a++;
782 // OMP5-NEXT: a++;
783     #pragma omp target map(this[a:1])
784 // OMP5-NEXT: #pragma omp target map(tofrom: this[a:1])
785       a++;
786 // OMP5-NEXT: a++;
787     #pragma omp target map(this[a])
788 // OMP5-NEXT: #pragma omp target map(tofrom: this[a])
789       a++;
790 // OMP5-NEXT: a++;
791   }
792 // OMP5-NEXT: }
793 };
794 // OMP5-NEXT: };
795 
796 // OMP5-LABEL: int main(int argc, char **argv) {
797 int main (int argc, char **argv) {
798   int i, j, a[20], always, close;
799 // OMP5-NEXT: int i, j, a[20]
800 #pragma omp target
801 // OMP5-NEXT: #pragma omp target
802   foo();
803 // OMP5-NEXT: foo();
804 #pragma omp target if (argc > 0)
805 // OMP5-NEXT: #pragma omp target if(argc > 0)
806   foo();
807 // OMP5-NEXT: foo();
808 
809 #pragma omp target map(i) if(argc>0)
810 // OMP5-NEXT: #pragma omp target map(tofrom: i) if(argc > 0)
811   foo();
812 // OMP5-NEXT: foo();
813 
814 #pragma omp target map(i)
815 // OMP5-NEXT: #pragma omp target map(tofrom: i)
816   foo();
817 // OMP5-NEXT: foo();
818 
819 #pragma omp target map(a[0:10], i)
820 // OMP5-NEXT: #pragma omp target map(tofrom: a[0:10],i)
821   foo();
822 // OMP5-NEXT: foo();
823 
824 #pragma omp target map(to: i) map(from: j)
825 // OMP5-NEXT: #pragma omp target map(to: i) map(from: j)
826   foo();
827 // OMP5-NEXT: foo();
828 
829 #pragma omp target map(always,alloc: i)
830 // OMP5-NEXT: #pragma omp target map(always,alloc: i)
831   foo();
832 // OMP5-NEXT: foo();
833 
834 #pragma omp target map(always from: i)
835 // OMP5-NEXT: #pragma omp target map(always,from: i)
836   foo();
837 // OMP5-NEXT: foo();
838 
839 #pragma omp target map(always)
840 // OMP5-NEXT: #pragma omp target map(tofrom: always)
841   {always++;}
842 // OMP5-NEXT: {
843 // OMP5-NEXT: always++;
844 // OMP5-NEXT: }
845 
846 #pragma omp target map(always,i)
847 // OMP5-NEXT: #pragma omp target map(tofrom: always,i)
848   {always++;i++;}
849 // OMP5-NEXT: {
850 // OMP5-NEXT: always++;
851 // OMP5-NEXT: i++;
852 // OMP5-NEXT: }
853 
854 #pragma omp target map(close,alloc: i)
855 // OMP5-NEXT: #pragma omp target map(close,alloc: i)
856   foo();
857 // OMP5-NEXT: foo();
858 
859 #pragma omp target map(close from: i)
860 // OMP5-NEXT: #pragma omp target map(close,from: i)
861   foo();
862 // OMP5-NEXT: foo();
863 
864 #pragma omp target map(close)
865 // OMP5-NEXT: #pragma omp target map(tofrom: close)
866   {close++;}
867 // OMP5-NEXT: {
868 // OMP5-NEXT: close++;
869 // OMP5-NEXT: }
870 
871 #pragma omp target map(close,i)
872 // OMP5-NEXT: #pragma omp target map(tofrom: close,i)
873   {close++;i++;}
874 // OMP5-NEXT: {
875 // OMP5-NEXT: close++;
876 // OMP5-NEXT: i++;
877 // OMP5-NEXT: }
878 
879 #pragma omp target nowait
880 // OMP5-NEXT: #pragma omp target nowait
881   foo();
882 // OMP5-NEXT: foo();
883 
884 #pragma omp target depend(in : argc, argv[i:argc], a[:])
885 // OMP5-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:])
886   foo();
887 // OMP5-NEXT: foo();
888 
889 #pragma omp target defaultmap(alloc: scalar)
890 // OMP5-NEXT: #pragma omp target defaultmap(alloc: scalar)
891   foo();
892 // OMP5-NEXT: foo();
893 
894 #pragma omp target defaultmap(to: scalar)
895 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar)
896   foo();
897 // OMP5-NEXT: foo();
898 
899 #pragma omp target defaultmap(from: scalar)
900 // OMP5-NEXT: #pragma omp target defaultmap(from: scalar)
901   foo();
902 // OMP5-NEXT: foo();
903 
904 #pragma omp target defaultmap(tofrom: scalar)
905 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: scalar)
906   foo();
907 // OMP5-NEXT: foo();
908 
909 #pragma omp target defaultmap(firstprivate: scalar)
910 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: scalar)
911   foo();
912 // OMP5-NEXT: foo();
913 
914 #pragma omp target defaultmap(none: scalar)
915 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar)
916   foo();
917 // OMP5-NEXT: foo();
918 
919 #pragma omp target defaultmap(default: scalar)
920 // OMP5-NEXT: #pragma omp target defaultmap(default: scalar)
921   foo();
922 // OMP5-NEXT: foo();
923 
924 #pragma omp target defaultmap(alloc: aggregate)
925 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate)
926   foo();
927 // OMP5-NEXT: foo();
928 
929 #pragma omp target defaultmap(to: aggregate)
930 // OMP5-NEXT: #pragma omp target defaultmap(to: aggregate)
931   foo();
932 // OMP5-NEXT: foo();
933 
934 #pragma omp target defaultmap(from: aggregate)
935 // OMP5-NEXT: #pragma omp target defaultmap(from: aggregate)
936   foo();
937 // OMP5-NEXT: foo();
938 
939 #pragma omp target defaultmap(tofrom: aggregate)
940 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate)
941   foo();
942 // OMP5-NEXT: foo();
943 
944 #pragma omp target defaultmap(firstprivate: aggregate)
945 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: aggregate)
946   foo();
947 // OMP5-NEXT: foo();
948 
949 #pragma omp target defaultmap(none: aggregate)
950 // OMP5-NEXT: #pragma omp target defaultmap(none: aggregate)
951   foo();
952 // OMP5-NEXT: foo();
953 
954 #pragma omp target defaultmap(default: aggregate)
955 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate)
956   foo();
957 // OMP5-NEXT: foo();
958 
959 #pragma omp target defaultmap(alloc: pointer)
960 // OMP5-NEXT: #pragma omp target defaultmap(alloc: pointer)
961   foo();
962 // OMP5-NEXT: foo();
963 
964 #pragma omp target defaultmap(to: pointer)
965 // OMP5-NEXT: #pragma omp target defaultmap(to: pointer)
966   foo();
967 // OMP5-NEXT: foo();
968 
969 #pragma omp target defaultmap(from: pointer)
970 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer)
971   foo();
972 // OMP5-NEXT: foo();
973 
974 #pragma omp target defaultmap(tofrom: pointer)
975 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: pointer)
976   foo();
977 // OMP5-NEXT: foo();
978 
979 #pragma omp target defaultmap(firstprivate: pointer)
980 // OMP5-NEXT: #pragma omp target defaultmap(firstprivate: pointer)
981   foo();
982 // OMP5-NEXT: foo();
983 
984 #pragma omp target defaultmap(none: pointer)
985 // OMP5-NEXT: #pragma omp target defaultmap(none: pointer)
986   foo();
987 // OMP5-NEXT: foo();
988 
989 #pragma omp target defaultmap(default: pointer)
990 // OMP5-NEXT: #pragma omp target defaultmap(default: pointer)
991   foo();
992 // OMP5-NEXT: foo();
993 
994 #pragma omp target defaultmap(to: scalar) defaultmap(tofrom: pointer)
995 // OMP5-NEXT: #pragma omp target defaultmap(to: scalar) defaultmap(tofrom: pointer)
996   foo();
997 // OMP5-NEXT: foo();
998 
999 #pragma omp target defaultmap(from: pointer) defaultmap(none: aggregate)
1000 // OMP5-NEXT: #pragma omp target defaultmap(from: pointer) defaultmap(none: aggregate)
1001   foo();
1002 // OMP5-NEXT: foo();
1003 
1004 #pragma omp target defaultmap(default: aggregate) defaultmap(alloc: scalar)
1005 // OMP5-NEXT: #pragma omp target defaultmap(default: aggregate) defaultmap(alloc: scalar)
1006   foo();
1007 // OMP5-NEXT: foo();
1008 
1009 #pragma omp target defaultmap(alloc: aggregate) defaultmap(firstprivate: scalar) defaultmap(tofrom: pointer)
1010 // OMP5-NEXT: #pragma omp target defaultmap(alloc: aggregate) defaultmap(firstprivate: scalar) defaultmap(tofrom: pointer)
1011   foo();
1012 // OMP5-NEXT: foo();
1013 
1014 #pragma omp target defaultmap(tofrom: aggregate) defaultmap(to: pointer) defaultmap(alloc: scalar)
1015 // OMP5-NEXT: #pragma omp target defaultmap(tofrom: aggregate) defaultmap(to: pointer) defaultmap(alloc: scalar)
1016   foo();
1017 // OMP5-NEXT: foo();
1018 
1019   int *g;
1020 // OMP5-NEXT: int *g;
1021 
1022 #pragma omp target is_device_ptr(g) defaultmap(none: pointer)
1023 // OMP5-NEXT: #pragma omp target is_device_ptr(g) defaultmap(none: pointer)
1024   g++;
1025 // OMP5-NEXT: g++;
1026 
1027 #pragma omp target private(g) defaultmap(none: pointer)
1028 // OMP5-NEXT: #pragma omp target private(g) defaultmap(none: pointer)
1029   g++;
1030 // OMP5-NEXT: g++;
1031 
1032 #pragma omp target firstprivate(g) defaultmap(none: pointer)
1033 // OMP5-NEXT: #pragma omp target firstprivate(g) defaultmap(none: pointer)
1034   g++;
1035 // OMP5-NEXT: g++;
1036 
1037 #pragma omp target defaultmap(none: scalar) map(to: i)
1038 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar) map(to: i)
1039   i++;
1040 // OMP5-NEXT: i++;
1041 
1042 #pragma omp target defaultmap(none: aggregate) map(to: a)
1043 // OMP5-NEXT: #pragma omp target defaultmap(none: aggregate) map(to: a)
1044   a[3]++;
1045 // OMP5-NEXT: a[3]++;
1046 
1047 #pragma omp target defaultmap(none: scalar)
1048 // OMP5-NEXT: #pragma omp target defaultmap(none: scalar)
1049   bar();
1050 // OMP5-NEXT: bar();
1051   return tmain<int, 5>(argc, &argc) + tmain<char, 1>(argv[0][0], argv[0]);
1052 }
1053 
1054 #endif //OMP5
1055 #endif
1056