xref: /llvm-project/clang/test/OpenMP/target_exit_data_ast_print.cpp (revision 7c1d9b15eee3a34678addab2bab66f3020ac0753)
1 // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -ast-print %s | FileCheck %s
2 // RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -emit-pch -o %t %s
3 // RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s
4 
5 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -ast-print %s | FileCheck %s
6 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -emit-pch -o %t %s
7 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s
8 
9 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=52 -ast-print %s | FileCheck %s
10 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=52 -x c++ -std=c++11 -emit-pch -o %t %s
11 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=52 -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s
12 
13 // RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s
14 // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s
15 // RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s
16 
17 // RUN: %clang_cc1 -verify -fopenmp-simd -ast-print %s | FileCheck %s
18 // RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -emit-pch -o %t %s
19 // RUN: %clang_cc1 -fopenmp-simd -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s
20 
21 // expected-no-diagnostics
22 
23 #ifndef HEADER
24 #define HEADER
25 
26 template <typename T, int C>
tmain(T argc,T * argv)27 T tmain(T argc, T *argv) {
28   T i, j, b, c, d, e, x[20];
29 
30   i = argc;
31 #pragma omp target exit data map(from: i)
32 
33 #pragma omp target exit data map(from: i) if (target exit data: j > 0)
34 
35 #pragma omp target exit data map(from: i) if (b)
36 
37 #pragma omp target exit data map(from: c)
38 
39 #pragma omp target exit data map(from: c) if(b>e)
40 
41 #pragma omp target exit data map(release: x[0:10], c)
42 
43 #pragma omp target exit data map(delete: x[0:10])
44 
45 #pragma omp target exit data map(always, delete: x[0:10])
46 
47 #pragma omp target exit data map(from: c) map(release: d)
48 
49 #pragma omp target exit data map(always,release: e)
50 
51 #pragma omp target exit data nowait map(from: i)
52 
53 #pragma omp target exit data nowait map(from: i) if (target exit data: j > 0)
54 
55 #pragma omp target exit data map(from: i) if (b) nowait
56 
57 #pragma omp target exit data map(from: c) nowait
58 
59 #pragma omp target exit data map(from: c) nowait if(b>e)
60 
61 #pragma omp target exit data nowait map(release: x[0:10], c)
62 
63 #pragma omp target exit data nowait map(from: c) map(release: d)
64 
65 #pragma omp target exit data nowait map(always,release: e)
66 
67 #pragma omp target exit data depend(in : argc, argv[i:argc], x[:]) nowait map(from: i)
68 
69 #pragma omp target exit data nowait depend(in : argc, argv[i:argc], x[:]) map(from: i) if (target exit data: j > 0)
70 
71 #pragma omp target exit data map(from: i) depend(in : argc, argv[i:argc], x[:]) if (b) nowait
72 
73 #pragma omp target exit data map(from: c) depend(in : argc, argv[i:argc], x[:]) nowait
74 
75 #pragma omp target exit data map(from: c) depend(in : argc, argv[i:argc], x[:]) nowait if(b>e)
76 
77 #pragma omp target exit data nowait map(release: x[0:10], c) depend(in : argc, argv[i:argc], x[:])
78 
79 #pragma omp target exit data nowait map(from: c) depend(in : argc, argv[i:argc], x[:]) map(release: d)
80 
81 #pragma omp target exit data depend(in : argc, argv[i:argc], x[:]) nowait map(always,release: e)
82 
83   return 0;
84 }
85 
86 // CHECK: template <typename T, int C> T tmain(T argc, T *argv) {
87 // CHECK-NEXT: T i, j, b, c, d, e, x[20];
88 // CHECK-NEXT: i = argc;
89 // CHECK-NEXT: #pragma omp target exit data map(from: i){{$}}
90 // CHECK-NEXT: #pragma omp target exit data map(from: i) if(target exit data: j > 0)
91 // CHECK-NEXT: #pragma omp target exit data map(from: i) if(b)
92 // CHECK-NEXT: #pragma omp target exit data map(from: c)
93 // CHECK-NEXT: #pragma omp target exit data map(from: c) if(b > e)
94 // CHECK-NEXT: #pragma omp target exit data map(release: x[0:10],c)
95 // CHECK-NEXT: #pragma omp target exit data map(delete: x[0:10])
96 // CHECK-NEXT: #pragma omp target exit data map(always,delete: x[0:10])
97 // CHECK-NEXT: #pragma omp target exit data map(from: c) map(release: d)
98 // CHECK-NEXT: #pragma omp target exit data map(always,release: e)
99 // CHECK-NEXT: #pragma omp target exit data nowait map(from: i)
100 // CHECK-NEXT: #pragma omp target exit data nowait map(from: i) if(target exit data: j > 0)
101 // CHECK-NEXT: #pragma omp target exit data map(from: i) if(b) nowait
102 // CHECK-NEXT: #pragma omp target exit data map(from: c) nowait
103 // CHECK-NEXT: #pragma omp target exit data map(from: c) nowait if(b > e)
104 // CHECK-NEXT: #pragma omp target exit data nowait map(release: x[0:10],c)
105 // CHECK-NEXT: #pragma omp target exit data nowait map(from: c) map(release: d)
106 // CHECK-NEXT: #pragma omp target exit data nowait map(always,release: e)
107 // CHECK-NEXT: #pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) nowait map(from: i)
108 // CHECK-NEXT: #pragma omp target exit data nowait depend(in : argc,argv[i:argc],x[:]) map(from: i) if(target exit data: j > 0)
109 // CHECK-NEXT: #pragma omp target exit data map(from: i) depend(in : argc,argv[i:argc],x[:]) if(b) nowait
110 // CHECK-NEXT: #pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait
111 // CHECK-NEXT: #pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait if(b > e)
112 // CHECK-NEXT: #pragma omp target exit data nowait map(release: x[0:10],c) depend(in : argc,argv[i:argc],x[:])
113 // CHECK-NEXT: #pragma omp target exit data nowait map(from: c) depend(in : argc,argv[i:argc],x[:]) map(release: d)
114 // CHECK-NEXT: #pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) nowait map(always,release: e)
115 // CHECK: template<> int tmain<int, 5>(int argc, int *argv) {
116 // CHECK-NEXT: int i, j, b, c, d, e, x[20];
117 // CHECK-NEXT: i = argc;
118 // CHECK-NEXT: #pragma omp target exit data map(from: i)
119 // CHECK-NEXT: #pragma omp target exit data map(from: i) if(target exit data: j > 0)
120 // CHECK-NEXT: #pragma omp target exit data map(from: i) if(b)
121 // CHECK-NEXT: #pragma omp target exit data map(from: c)
122 // CHECK-NEXT: #pragma omp target exit data map(from: c) if(b > e)
123 // CHECK-NEXT: #pragma omp target exit data map(release: x[0:10],c)
124 // CHECK-NEXT: #pragma omp target exit data map(delete: x[0:10])
125 // CHECK-NEXT: #pragma omp target exit data map(always,delete: x[0:10])
126 // CHECK-NEXT: #pragma omp target exit data map(from: c) map(release: d)
127 // CHECK-NEXT: #pragma omp target exit data map(always,release: e)
128 // CHECK-NEXT: #pragma omp target exit data nowait map(from: i)
129 // CHECK-NEXT: #pragma omp target exit data nowait map(from: i) if(target exit data: j > 0)
130 // CHECK-NEXT: #pragma omp target exit data map(from: i) if(b) nowait
131 // CHECK-NEXT: #pragma omp target exit data map(from: c) nowait
132 // CHECK-NEXT: #pragma omp target exit data map(from: c) nowait if(b > e)
133 // CHECK-NEXT: #pragma omp target exit data nowait map(release: x[0:10],c)
134 // CHECK-NEXT: #pragma omp target exit data nowait map(from: c) map(release: d)
135 // CHECK-NEXT: #pragma omp target exit data nowait map(always,release: e)
136 // CHECK-NEXT: #pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) nowait map(from: i)
137 // CHECK-NEXT: #pragma omp target exit data nowait depend(in : argc,argv[i:argc],x[:]) map(from: i) if(target exit data: j > 0)
138 // CHECK-NEXT: #pragma omp target exit data map(from: i) depend(in : argc,argv[i:argc],x[:]) if(b) nowait
139 // CHECK-NEXT: #pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait
140 // CHECK-NEXT: #pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait if(b > e)
141 // CHECK-NEXT: #pragma omp target exit data nowait map(release: x[0:10],c) depend(in : argc,argv[i:argc],x[:])
142 // CHECK-NEXT: #pragma omp target exit data nowait map(from: c) depend(in : argc,argv[i:argc],x[:]) map(release: d)
143 // CHECK-NEXT: #pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) nowait map(always,release: e)
144 // CHECK: template<> char tmain<char, 1>(char argc, char *argv) {
145 // CHECK-NEXT: char i, j, b, c, d, e, x[20];
146 // CHECK-NEXT: i = argc;
147 // CHECK-NEXT: #pragma omp target exit data map(from: i)
148 // CHECK-NEXT: #pragma omp target exit data map(from: i) if(target exit data: j > 0)
149 // CHECK-NEXT: #pragma omp target exit data map(from: i) if(b)
150 // CHECK-NEXT: #pragma omp target exit data map(from: c)
151 // CHECK-NEXT: #pragma omp target exit data map(from: c) if(b > e)
152 // CHECK-NEXT: #pragma omp target exit data map(release: x[0:10],c)
153 // CHECK-NEXT: #pragma omp target exit data map(delete: x[0:10])
154 // CHECK-NEXT: #pragma omp target exit data map(always,delete: x[0:10])
155 // CHECK-NEXT: #pragma omp target exit data map(from: c) map(release: d)
156 // CHECK-NEXT: #pragma omp target exit data map(always,release: e)
157 // CHECK-NEXT: #pragma omp target exit data nowait map(from: i)
158 // CHECK-NEXT: #pragma omp target exit data nowait map(from: i) if(target exit data: j > 0)
159 // CHECK-NEXT: #pragma omp target exit data map(from: i) if(b) nowait
160 // CHECK-NEXT: #pragma omp target exit data map(from: c) nowait
161 // CHECK-NEXT: #pragma omp target exit data map(from: c) nowait if(b > e)
162 // CHECK-NEXT: #pragma omp target exit data nowait map(release: x[0:10],c)
163 // CHECK-NEXT: #pragma omp target exit data nowait map(from: c) map(release: d)
164 // CHECK-NEXT: #pragma omp target exit data nowait map(always,release: e)
165 // CHECK-NEXT: #pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) nowait map(from: i)
166 // CHECK-NEXT: #pragma omp target exit data nowait depend(in : argc,argv[i:argc],x[:]) map(from: i) if(target exit data: j > 0)
167 // CHECK-NEXT: #pragma omp target exit data map(from: i) depend(in : argc,argv[i:argc],x[:]) if(b) nowait
168 // CHECK-NEXT: #pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait
169 // CHECK-NEXT: #pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait if(b > e)
170 // CHECK-NEXT: #pragma omp target exit data nowait map(release: x[0:10],c) depend(in : argc,argv[i:argc],x[:])
171 // CHECK-NEXT: #pragma omp target exit data nowait map(from: c) depend(in : argc,argv[i:argc],x[:]) map(release: d)
172 // CHECK-NEXT: #pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) nowait map(always,release: e)
173 
main(int argc,char ** argv)174 int main (int argc, char **argv) {
175   int b = argc, i, c, d, e, f, g, x[20];
176   static int a;
177 // CHECK: static int a;
178 
179 #pragma omp target exit data map(from: a)
180 // CHECK:      #pragma omp target exit data map(from: a)
181   a=2;
182 // CHECK-NEXT: a = 2;
183 #pragma omp target exit data map(from: a) if (target exit data: b)
184 // CHECK: #pragma omp target exit data map(from: a) if(target exit data: b)
185 
186 #pragma omp target exit data map(from: a) if (b > g)
187 // CHECK: #pragma omp target exit data map(from: a) if(b > g)
188 
189 #pragma omp target exit data map(from: c)
190 // CHECK-NEXT: #pragma omp target exit data map(from: c)
191 
192 #pragma omp target exit data map(release: c) if(b>g)
193 // CHECK-NEXT: #pragma omp target exit data map(release: c) if(b > g)
194 
195 #pragma omp target exit data map(from: x[0:10], c)
196 // CHECK-NEXT: #pragma omp target exit data map(from: x[0:10],c)
197 
198 #pragma omp target exit data map(delete: x[0:10])
199 // CHECK-NEXT: #pragma omp target exit data map(delete: x[0:10])
200 
201 #pragma omp target exit data map(always, delete: x[0:10])
202 // CHECK-NEXT: #pragma omp target exit data map(always,delete: x[0:10])
203 
204 #pragma omp target exit data map(from: c) map(release: d)
205 // CHECK-NEXT: #pragma omp target exit data map(from: c) map(release: d)
206 
207 #pragma omp target exit data map(always,release: e)
208 // CHECK-NEXT: #pragma omp target exit data map(always,release: e)
209 
210 #pragma omp target exit data nowait map(from: a)
211 // CHECK:      #pragma omp target exit data nowait map(from: a)
212 
213 #pragma omp target exit data nowait map(from: a) if (target exit data: b)
214 // CHECK: #pragma omp target exit data nowait map(from: a) if(target exit data: b)
215 
216 #pragma omp target exit data map(from: a) if (b > g) nowait
217 // CHECK: #pragma omp target exit data map(from: a) if(b > g) nowait
218 
219 #pragma omp target exit data map(from: c) nowait
220 // CHECK-NEXT: #pragma omp target exit data map(from: c) nowait
221 
222 #pragma omp target exit data map(release: c) nowait if(b>g)
223 // CHECK-NEXT: #pragma omp target exit data map(release: c) nowait if(b > g)
224 
225 #pragma omp target exit data nowait map(from: x[0:10], c)
226 // CHECK-NEXT: #pragma omp target exit data nowait map(from: x[0:10],c)
227 
228 #pragma omp target exit data nowait map(from: c) map(release: d)
229 // CHECK-NEXT: #pragma omp target exit data nowait map(from: c) map(release: d)
230 
231 #pragma omp target exit data nowait map(always,release: e)
232 // CHECK-NEXT: #pragma omp target exit data nowait map(always,release: e)
233 
234 #pragma omp target exit data nowait depend(in : argc,argv[i:argc],x[:]) map(from: a)
235 // CHECK:      #pragma omp target exit data nowait depend(in : argc,argv[i:argc],x[:]) map(from: a)
236 
237 #pragma omp target exit data nowait map(from: a) depend(in : argc,argv[i:argc],x[:]) if (target exit data: b)
238 // CHECK: #pragma omp target exit data nowait map(from: a) depend(in : argc,argv[i:argc],x[:]) if(target exit data: b)
239 
240 #pragma omp target exit data map(from: a) if (b > g) nowait depend(in : argc,argv[i:argc],x[:])
241 // CHECK: #pragma omp target exit data map(from: a) if(b > g) nowait depend(in : argc,argv[i:argc],x[:])
242 
243 #pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait
244 // CHECK-NEXT: #pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait
245 
246 #pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) map(release: c) nowait if(b>g)
247 // CHECK-NEXT: #pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) map(release: c) nowait if(b > g)
248 
249 #pragma omp target exit data nowait map(from: x[0:10], c) depend(in : argc,argv[i:argc],x[:])
250 // CHECK-NEXT: #pragma omp target exit data nowait map(from: x[0:10],c) depend(in : argc,argv[i:argc],x[:])
251 
252 #pragma omp target exit data nowait map(from: c) depend(in : argc,argv[i:argc],x[:]) map(release: d)
253 // CHECK-NEXT: #pragma omp target exit data nowait map(from: c) depend(in : argc,argv[i:argc],x[:]) map(release: d)
254 
255 #pragma omp target exit data nowait depend(in : argc,argv[i:argc],x[:]) map(always,release: e)
256 // CHECK-NEXT: #pragma omp target exit data nowait depend(in : argc,argv[i:argc],x[:]) map(always,release: e)
257 
258   return tmain<int, 5>(argc, &argc) + tmain<char, 1>(argv[0][0], argv[0]);
259 }
260 
261 #endif
262