blob: 24f6d5a600599f4713a9ad38908c2b806fa8c586 [file] [log] [blame]
Alexey Bataevdb390212015-05-20 04:24:19 +00001// RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s
2// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s
3// RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
Alexey Bataev0bd520b2014-09-19 08:19:49 +00004// expected-no-diagnostics
5
6#ifndef HEADER
7#define HEADER
8
9void foo() {}
10
11template <typename T, int C>
12T tmain(T argc, T *argv) {
Kelvin Li0bff7af2015-11-23 05:32:03 +000013 T i, j, a[20];
Alexey Bataev0bd520b2014-09-19 08:19:49 +000014#pragma omp target
15 foo();
Alexey Bataev7371aa32015-09-03 08:45:56 +000016#pragma omp target if (target:argc > 0)
Alexey Bataev0bd520b2014-09-19 08:19:49 +000017 foo();
18#pragma omp target if (C)
19 foo();
Kelvin Li0bff7af2015-11-23 05:32:03 +000020#pragma omp target map(i)
21 foo();
22#pragma omp target map(a[0:10], i)
23 foo();
24#pragma omp target map(to: i) map(from: j)
25 foo();
26#pragma omp target map(always,alloc: i)
27 foo();
Arpith Chacko Jacobbfc33d02016-01-21 22:18:28 +000028#pragma omp target nowait
29 foo();
Arpith Chacko Jacobcef5c952016-01-22 00:49:21 +000030#pragma omp target depend(in : argc, argv[i:argc], a[:])
31 foo();
Arpith Chacko Jacob3cf89042016-01-26 16:37:23 +000032#pragma omp target defaultmap(tofrom: scalar)
33 foo();
Alexey Bataev0bd520b2014-09-19 08:19:49 +000034 return 0;
35}
36
Serge Pavlova67a4d22016-11-10 08:49:37 +000037// CHECK: template <typename T, int C> T tmain(T argc, T *argv) {
38// CHECK-NEXT: T i, j, a[20]
39// CHECK-NEXT: #pragma omp target
40// CHECK-NEXT: foo();
41// CHECK-NEXT: #pragma omp target if(target: argc > 0)
42// CHECK-NEXT: foo()
43// CHECK-NEXT: #pragma omp target if(C)
44// CHECK-NEXT: foo()
45// CHECK-NEXT: #pragma omp target map(tofrom: i)
46// CHECK-NEXT: foo()
47// CHECK-NEXT: #pragma omp target map(tofrom: a[0:10],i)
48// CHECK-NEXT: foo()
49// CHECK-NEXT: #pragma omp target map(to: i) map(from: j)
50// CHECK-NEXT: foo()
51// CHECK-NEXT: #pragma omp target map(always,alloc: i)
52// CHECK-NEXT: foo()
53// CHECK-NEXT: #pragma omp target nowait
54// CHECK-NEXT: foo()
55// CHECK-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:])
56// CHECK-NEXT: foo()
57// CHECK-NEXT: #pragma omp target defaultmap(tofrom: scalar)
58// CHECK-NEXT: foo()
59// CHECK: template<> int tmain<int, 5>(int argc, int *argv) {
Kelvin Li0bff7af2015-11-23 05:32:03 +000060// CHECK-NEXT: int i, j, a[20]
Alexey Bataev0bd520b2014-09-19 08:19:49 +000061// CHECK-NEXT: #pragma omp target
62// CHECK-NEXT: foo();
Alexey Bataev7371aa32015-09-03 08:45:56 +000063// CHECK-NEXT: #pragma omp target if(target: argc > 0)
Alexey Bataev0bd520b2014-09-19 08:19:49 +000064// CHECK-NEXT: foo()
65// CHECK-NEXT: #pragma omp target if(5)
66// CHECK-NEXT: foo()
Kelvin Li0bff7af2015-11-23 05:32:03 +000067// CHECK-NEXT: #pragma omp target map(tofrom: i)
68// CHECK-NEXT: foo()
69// CHECK-NEXT: #pragma omp target map(tofrom: a[0:10],i)
70// CHECK-NEXT: foo()
71// CHECK-NEXT: #pragma omp target map(to: i) map(from: j)
72// CHECK-NEXT: foo()
73// CHECK-NEXT: #pragma omp target map(always,alloc: i)
74// CHECK-NEXT: foo()
Arpith Chacko Jacobbfc33d02016-01-21 22:18:28 +000075// CHECK-NEXT: #pragma omp target nowait
76// CHECK-NEXT: foo()
Arpith Chacko Jacobcef5c952016-01-22 00:49:21 +000077// CHECK-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:])
78// CHECK-NEXT: foo()
Arpith Chacko Jacob3cf89042016-01-26 16:37:23 +000079// CHECK-NEXT: #pragma omp target defaultmap(tofrom: scalar)
80// CHECK-NEXT: foo()
Serge Pavlova67a4d22016-11-10 08:49:37 +000081// CHECK: template<> char tmain<char, 1>(char argc, char *argv) {
Kelvin Li0bff7af2015-11-23 05:32:03 +000082// CHECK-NEXT: char i, j, a[20]
Alexey Bataev0bd520b2014-09-19 08:19:49 +000083// CHECK-NEXT: #pragma omp target
84// CHECK-NEXT: foo();
Alexey Bataev7371aa32015-09-03 08:45:56 +000085// CHECK-NEXT: #pragma omp target if(target: argc > 0)
Alexey Bataev0bd520b2014-09-19 08:19:49 +000086// CHECK-NEXT: foo()
87// CHECK-NEXT: #pragma omp target if(1)
88// CHECK-NEXT: foo()
Kelvin Li0bff7af2015-11-23 05:32:03 +000089// CHECK-NEXT: #pragma omp target map(tofrom: i)
90// CHECK-NEXT: foo()
91// CHECK-NEXT: #pragma omp target map(tofrom: a[0:10],i)
92// CHECK-NEXT: foo()
93// CHECK-NEXT: #pragma omp target map(to: i) map(from: j)
94// CHECK-NEXT: foo()
95// CHECK-NEXT: #pragma omp target map(always,alloc: i)
96// CHECK-NEXT: foo()
Arpith Chacko Jacobbfc33d02016-01-21 22:18:28 +000097// CHECK-NEXT: #pragma omp target nowait
98// CHECK-NEXT: foo()
Arpith Chacko Jacobcef5c952016-01-22 00:49:21 +000099// CHECK-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:])
100// CHECK-NEXT: foo()
Arpith Chacko Jacob3cf89042016-01-26 16:37:23 +0000101// CHECK-NEXT: #pragma omp target defaultmap(tofrom: scalar)
102// CHECK-NEXT: foo()
Alexey Bataev0bd520b2014-09-19 08:19:49 +0000103
104// CHECK-LABEL: int main(int argc, char **argv) {
105int main (int argc, char **argv) {
Kelvin Li0bff7af2015-11-23 05:32:03 +0000106 int i, j, a[20];
107// CHECK-NEXT: int i, j, a[20]
Alexey Bataev0bd520b2014-09-19 08:19:49 +0000108#pragma omp target
109// CHECK-NEXT: #pragma omp target
110 foo();
111// CHECK-NEXT: foo();
112#pragma omp target if (argc > 0)
113// CHECK-NEXT: #pragma omp target if(argc > 0)
114 foo();
115// CHECK-NEXT: foo();
Kelvin Li0bff7af2015-11-23 05:32:03 +0000116
117#pragma omp target map(i) if(argc>0)
118// CHECK-NEXT: #pragma omp target map(tofrom: i) if(argc > 0)
119 foo();
120// CHECK-NEXT: foo();
121
122#pragma omp target map(i)
123// CHECK-NEXT: #pragma omp target map(tofrom: i)
124 foo();
125// CHECK-NEXT: foo();
126
127#pragma omp target map(a[0:10], i)
128// CHECK-NEXT: #pragma omp target map(tofrom: a[0:10],i)
129 foo();
130// CHECK-NEXT: foo();
131
132#pragma omp target map(to: i) map(from: j)
133// CHECK-NEXT: #pragma omp target map(to: i) map(from: j)
134 foo();
135// CHECK-NEXT: foo();
136
137#pragma omp target map(always,alloc: i)
138// CHECK-NEXT: #pragma omp target map(always,alloc: i)
139 foo();
140// CHECK-NEXT: foo();
141
Arpith Chacko Jacobbfc33d02016-01-21 22:18:28 +0000142#pragma omp target nowait
143// CHECK-NEXT: #pragma omp target nowait
144 foo();
145// CHECK-NEXT: foo();
146
Arpith Chacko Jacobcef5c952016-01-22 00:49:21 +0000147#pragma omp target depend(in : argc, argv[i:argc], a[:])
148// CHECK-NEXT: #pragma omp target depend(in : argc,argv[i:argc],a[:])
149 foo();
150// CHECK-NEXT: foo();
151
Arpith Chacko Jacob3cf89042016-01-26 16:37:23 +0000152#pragma omp target defaultmap(tofrom: scalar)
153// CHECK-NEXT: #pragma omp target defaultmap(tofrom: scalar)
154 foo();
155// CHECK-NEXT: foo();
156
Alexey Bataev0bd520b2014-09-19 08:19:49 +0000157 return tmain<int, 5>(argc, &argc) + tmain<char, 1>(argv[0][0], argv[0]);
158}
159
160#endif