1 | // RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s |
2 | |
3 | // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify %s |
4 | |
5 | // expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute parallel for simd'}} |
6 | #pragma omp distribute parallel for simd |
7 | |
8 | // expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute parallel for simd'}} |
9 | #pragma omp distribute parallel for simd foo |
10 | |
11 | void test_no_clause() { |
12 | int i; |
13 | #pragma omp distribute parallel for simd |
14 | for (i = 0; i < 16; ++i) |
15 | ; |
16 | |
17 | // expected-error@+2 {{statement after '#pragma omp distribute parallel for simd' must be a for loop}} |
18 | #pragma omp distribute parallel for simd |
19 | ++i; |
20 | } |
21 | |
22 | void test_branch_protected_scope() { |
23 | int i = 0; |
24 | L1: |
25 | ++i; |
26 | |
27 | int x[24]; |
28 | |
29 | #pragma omp target |
30 | #pragma omp teams |
31 | #pragma omp distribute parallel for simd |
32 | for (i = 0; i < 16; ++i) { |
33 | if (i == 5) |
34 | goto L1; // expected-error {{use of undeclared label 'L1'}} |
35 | else if (i == 6) |
36 | return; // expected-error {{cannot return from OpenMP region}} |
37 | else if (i == 7) |
38 | goto L2; |
39 | else if (i == 8) { |
40 | L2: |
41 | x[i]++; |
42 | } |
43 | } |
44 | |
45 | if (x[0] == 0) |
46 | goto L2; // expected-error {{use of undeclared label 'L2'}} |
47 | else if (x[1] == 1) |
48 | goto L1; |
49 | } |
50 | |
51 | void test_invalid_clause() { |
52 | int i; |
53 | #pragma omp target |
54 | #pragma omp teams |
55 | // expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}} |
56 | #pragma omp distribute parallel for simd foo bar |
57 | for (i = 0; i < 16; ++i) |
58 | ; |
59 | } |
60 | |
61 | void test_non_identifiers() { |
62 | int i, x; |
63 | |
64 | #pragma omp target |
65 | #pragma omp teams |
66 | // expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}} |
67 | #pragma omp distribute parallel for simd; |
68 | for (i = 0; i < 16; ++i) |
69 | ; |
70 | #pragma omp target |
71 | #pragma omp teams |
72 | // expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}} |
73 | #pragma omp distribute parallel for simd firstprivate(x); |
74 | for (i = 0; i < 16; ++i) |
75 | ; |
76 | |
77 | #pragma omp target |
78 | #pragma omp teams |
79 | // expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}} |
80 | #pragma omp distribute parallel for simd private(x); |
81 | for (i = 0; i < 16; ++i) |
82 | ; |
83 | |
84 | #pragma omp target |
85 | #pragma omp teams |
86 | // expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}} |
87 | #pragma omp distribute parallel for simd, private(x); |
88 | for (i = 0; i < 16; ++i) |
89 | ; |
90 | } |
91 | |
92 | extern int foo(); |
93 | void test_safelen() { |
94 | int i; |
95 | #pragma omp target |
96 | #pragma omp teams |
97 | // expected-error@+1 {{expected '('}} |
98 | #pragma omp distribute parallel for simd safelen |
99 | for (i = 0; i < 16; ++i) |
100 | ; |
101 | #pragma omp target |
102 | #pragma omp teams |
103 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
104 | #pragma omp distribute parallel for simd safelen( |
105 | for (i = 0; i < 16; ++i) |
106 | ; |
107 | #pragma omp target |
108 | #pragma omp teams |
109 | // expected-error@+1 {{expected expression}} |
110 | #pragma omp distribute parallel for simd safelen() |
111 | for (i = 0; i < 16; ++i) |
112 | ; |
113 | #pragma omp target |
114 | #pragma omp teams |
115 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
116 | #pragma omp distribute parallel for simd safelen(, |
117 | for (i = 0; i < 16; ++i) |
118 | ; |
119 | #pragma omp target |
120 | #pragma omp teams |
121 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
122 | #pragma omp distribute parallel for simd safelen(, ) |
123 | for (i = 0; i < 16; ++i) |
124 | ; |
125 | #pragma omp target |
126 | #pragma omp teams |
127 | // expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}} |
128 | // expected-error@+1 {{expected '('}} |
129 | #pragma omp distribute parallel for simd safelen 4) |
130 | for (i = 0; i < 16; ++i) |
131 | ; |
132 | #pragma omp target |
133 | #pragma omp teams |
134 | // expected-error@+2 {{expected ')'}} |
135 | // expected-note@+1 {{to match this '('}} |
136 | #pragma omp distribute parallel for simd safelen(4 |
137 | for (i = 0; i < 16; ++i) |
138 | ; |
139 | #pragma omp target |
140 | #pragma omp teams |
141 | // expected-error@+2 {{expected ')'}} |
142 | // expected-note@+1 {{to match this '('}} |
143 | #pragma omp distribute parallel for simd safelen(4, |
144 | for (i = 0; i < 16; ++i) |
145 | ; |
146 | #pragma omp target |
147 | #pragma omp teams |
148 | // expected-error@+2 {{expected ')'}} |
149 | // expected-note@+1 {{to match this '('}} |
150 | #pragma omp distribute parallel for simd safelen(4, ) |
151 | for (i = 0; i < 16; ++i) |
152 | ; |
153 | #pragma omp target |
154 | #pragma omp teams |
155 | #pragma omp distribute parallel for simd safelen(4) |
156 | for (i = 0; i < 16; ++i) |
157 | ; |
158 | #pragma omp target |
159 | #pragma omp teams |
160 | // expected-error@+2 {{expected ')'}} |
161 | // expected-note@+1 {{to match this '('}} |
162 | #pragma omp distribute parallel for simd safelen(4 4) |
163 | for (i = 0; i < 16; ++i) |
164 | ; |
165 | #pragma omp target |
166 | #pragma omp teams |
167 | // expected-error@+2 {{expected ')'}} |
168 | // expected-note@+1 {{to match this '('}} |
169 | #pragma omp distribute parallel for simd safelen(4, , 4) |
170 | for (i = 0; i < 16; ++i) |
171 | ; |
172 | #pragma omp target |
173 | #pragma omp teams |
174 | #pragma omp distribute parallel for simd safelen(4) |
175 | for (i = 0; i < 16; ++i) |
176 | ; |
177 | #pragma omp target |
178 | #pragma omp teams |
179 | // expected-error@+2 {{expected ')'}} |
180 | // expected-note@+1 {{to match this '('}} |
181 | #pragma omp distribute parallel for simd safelen(4, 8) |
182 | for (i = 0; i < 16; ++i) |
183 | ; |
184 | #pragma omp target |
185 | #pragma omp teams |
186 | // expected-error@+1 {{expression is not an integer constant expression}} |
187 | #pragma omp distribute parallel for simd safelen(2.5) |
188 | for (i = 0; i < 16; ++i) |
189 | ; |
190 | #pragma omp target |
191 | #pragma omp teams |
192 | // expected-error@+1 {{expression is not an integer constant expression}} |
193 | #pragma omp distribute parallel for simd safelen(foo()) |
194 | for (i = 0; i < 16; ++i) |
195 | ; |
196 | #pragma omp target |
197 | #pragma omp teams |
198 | // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}} |
199 | #pragma omp distribute parallel for simd safelen(-5) |
200 | for (i = 0; i < 16; ++i) |
201 | ; |
202 | #pragma omp target |
203 | #pragma omp teams |
204 | // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}} |
205 | #pragma omp distribute parallel for simd safelen(0) |
206 | for (i = 0; i < 16; ++i) |
207 | ; |
208 | #pragma omp target |
209 | #pragma omp teams |
210 | // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}} |
211 | #pragma omp distribute parallel for simd safelen(5 - 5) |
212 | for (i = 0; i < 16; ++i) |
213 | ; |
214 | } |
215 | |
216 | void test_simdlen() { |
217 | int i; |
218 | #pragma omp target |
219 | #pragma omp teams |
220 | // expected-error@+1 {{expected '('}} |
221 | #pragma omp distribute parallel for simd simdlen |
222 | for (i = 0; i < 16; ++i) |
223 | ; |
224 | #pragma omp target |
225 | #pragma omp teams |
226 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
227 | #pragma omp distribute parallel for simd simdlen( |
228 | for (i = 0; i < 16; ++i) |
229 | ; |
230 | #pragma omp target |
231 | #pragma omp teams |
232 | // expected-error@+1 {{expected expression}} |
233 | #pragma omp distribute parallel for simd simdlen() |
234 | for (i = 0; i < 16; ++i) |
235 | ; |
236 | #pragma omp target |
237 | #pragma omp teams |
238 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
239 | #pragma omp distribute parallel for simd simdlen(, |
240 | for (i = 0; i < 16; ++i) |
241 | ; |
242 | #pragma omp target |
243 | #pragma omp teams |
244 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
245 | #pragma omp distribute parallel for simd simdlen(, ) |
246 | for (i = 0; i < 16; ++i) |
247 | ; |
248 | #pragma omp target |
249 | #pragma omp teams |
250 | // expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}} |
251 | // expected-error@+1 {{expected '('}} |
252 | #pragma omp distribute parallel for simd simdlen 4) |
253 | for (i = 0; i < 16; ++i) |
254 | ; |
255 | #pragma omp target |
256 | #pragma omp teams |
257 | // expected-error@+2 {{expected ')'}} |
258 | // expected-note@+1 {{to match this '('}} |
259 | #pragma omp distribute parallel for simd simdlen(4 |
260 | for (i = 0; i < 16; ++i) |
261 | ; |
262 | #pragma omp target |
263 | #pragma omp teams |
264 | // expected-error@+2 {{expected ')'}} |
265 | // expected-note@+1 {{to match this '('}} |
266 | #pragma omp distribute parallel for simd simdlen(4, |
267 | for (i = 0; i < 16; ++i) |
268 | ; |
269 | #pragma omp target |
270 | #pragma omp teams |
271 | // expected-error@+2 {{expected ')'}} |
272 | // expected-note@+1 {{to match this '('}} |
273 | #pragma omp distribute parallel for simd simdlen(4, ) |
274 | for (i = 0; i < 16; ++i) |
275 | ; |
276 | #pragma omp target |
277 | #pragma omp teams |
278 | #pragma omp distribute parallel for simd simdlen(4) |
279 | for (i = 0; i < 16; ++i) |
280 | ; |
281 | #pragma omp target |
282 | #pragma omp teams |
283 | // expected-error@+2 {{expected ')'}} |
284 | // expected-note@+1 {{to match this '('}} |
285 | #pragma omp distribute parallel for simd simdlen(4 4) |
286 | for (i = 0; i < 16; ++i) |
287 | ; |
288 | #pragma omp target |
289 | #pragma omp teams |
290 | // expected-error@+2 {{expected ')'}} |
291 | // expected-note@+1 {{to match this '('}} |
292 | #pragma omp distribute parallel for simd simdlen(4, , 4) |
293 | for (i = 0; i < 16; ++i) |
294 | ; |
295 | #pragma omp target |
296 | #pragma omp teams |
297 | #pragma omp distribute parallel for simd simdlen(4) |
298 | for (i = 0; i < 16; ++i) |
299 | ; |
300 | #pragma omp target |
301 | #pragma omp teams |
302 | // expected-error@+2 {{expected ')'}} |
303 | // expected-note@+1 {{to match this '('}} |
304 | #pragma omp distribute parallel for simd simdlen(4, 8) |
305 | for (i = 0; i < 16; ++i) |
306 | ; |
307 | #pragma omp target |
308 | #pragma omp teams |
309 | // expected-error@+1 {{expression is not an integer constant expression}} |
310 | #pragma omp distribute parallel for simd simdlen(2.5) |
311 | for (i = 0; i < 16; ++i) |
312 | ; |
313 | #pragma omp target |
314 | #pragma omp teams |
315 | // expected-error@+1 {{expression is not an integer constant expression}} |
316 | #pragma omp distribute parallel for simd simdlen(foo()) |
317 | for (i = 0; i < 16; ++i) |
318 | ; |
319 | #pragma omp target |
320 | #pragma omp teams |
321 | // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}} |
322 | #pragma omp distribute parallel for simd simdlen(-5) |
323 | for (i = 0; i < 16; ++i) |
324 | ; |
325 | #pragma omp target |
326 | #pragma omp teams |
327 | // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}} |
328 | #pragma omp distribute parallel for simd simdlen(0) |
329 | for (i = 0; i < 16; ++i) |
330 | ; |
331 | #pragma omp target |
332 | #pragma omp teams |
333 | // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}} |
334 | #pragma omp distribute parallel for simd simdlen(5 - 5) |
335 | for (i = 0; i < 16; ++i) |
336 | ; |
337 | } |
338 | |
339 | void test_safelen_simdlen() { |
340 | int i; |
341 | #pragma omp target |
342 | #pragma omp teams |
343 | // expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}} |
344 | #pragma omp distribute parallel for simd simdlen(6) safelen(5) |
345 | for (i = 0; i < 16; ++i) |
346 | ; |
347 | |
348 | #pragma omp target |
349 | #pragma omp teams |
350 | // expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}} |
351 | #pragma omp distribute parallel for simd safelen(5) simdlen(6) |
352 | for (i = 0; i < 16; ++i) |
353 | ; |
354 | } |
355 | |
356 | void test_collapse() { |
357 | int i; |
358 | #pragma omp target |
359 | #pragma omp teams |
360 | // expected-error@+1 {{expected '('}} |
361 | #pragma omp distribute parallel for simd collapse |
362 | for (i = 0; i < 16; ++i) |
363 | ; |
364 | #pragma omp target |
365 | #pragma omp teams |
366 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
367 | #pragma omp distribute parallel for simd collapse( |
368 | for (i = 0; i < 16; ++i) |
369 | ; |
370 | #pragma omp target |
371 | #pragma omp teams |
372 | // expected-error@+1 {{expected expression}} |
373 | #pragma omp distribute parallel for simd collapse() |
374 | for (i = 0; i < 16; ++i) |
375 | ; |
376 | #pragma omp target |
377 | #pragma omp teams |
378 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
379 | #pragma omp distribute parallel for simd collapse(, |
380 | for (i = 0; i < 16; ++i) |
381 | ; |
382 | #pragma omp target |
383 | #pragma omp teams |
384 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
385 | #pragma omp distribute parallel for simd collapse(, ) |
386 | for (i = 0; i < 16; ++i) |
387 | ; |
388 | #pragma omp target |
389 | #pragma omp teams |
390 | // expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}} |
391 | // expected-error@+1 {{expected '('}} |
392 | #pragma omp distribute parallel for simd collapse 4) |
393 | for (i = 0; i < 16; ++i) |
394 | ; |
395 | #pragma omp target |
396 | #pragma omp teams |
397 | // expected-error@+2 {{expected ')'}} |
398 | // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} |
399 | #pragma omp distribute parallel for simd collapse(4 |
400 | for (i = 0; i < 16; ++i) |
401 | ; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for simd', but found only 1}} |
402 | #pragma omp target |
403 | #pragma omp teams |
404 | // expected-error@+2 {{expected ')'}} |
405 | // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} |
406 | #pragma omp distribute parallel for simd collapse(4, |
407 | for (i = 0; i < 16; ++i) |
408 | ; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for simd', but found only 1}} |
409 | #pragma omp target |
410 | #pragma omp teams |
411 | // expected-error@+2 {{expected ')'}} |
412 | // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} |
413 | #pragma omp distribute parallel for simd collapse(4, ) |
414 | for (i = 0; i < 16; ++i) |
415 | ; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for simd', but found only 1}} |
416 | #pragma omp target |
417 | #pragma omp teams |
418 | // expected-note@+1 {{as specified in 'collapse' clause}} |
419 | #pragma omp distribute parallel for simd collapse(4) |
420 | for (i = 0; i < 16; ++i) |
421 | ; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for simd', but found only 1}} |
422 | #pragma omp target |
423 | #pragma omp teams |
424 | // expected-error@+2 {{expected ')'}} |
425 | // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} |
426 | #pragma omp distribute parallel for simd collapse(4 4) |
427 | for (i = 0; i < 16; ++i) |
428 | ; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for simd', but found only 1}} |
429 | #pragma omp target |
430 | #pragma omp teams |
431 | // expected-error@+2 {{expected ')'}} |
432 | // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} |
433 | #pragma omp distribute parallel for simd collapse(4, , 4) |
434 | for (i = 0; i < 16; ++i) |
435 | ; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for simd', but found only 1}} |
436 | #pragma omp target |
437 | #pragma omp teams |
438 | #pragma omp distribute parallel for simd collapse(4) |
439 | for (int i1 = 0; i1 < 16; ++i1) |
440 | for (int i2 = 0; i2 < 16; ++i2) |
441 | for (int i3 = 0; i3 < 16; ++i3) |
442 | for (int i4 = 0; i4 < 16; ++i4) |
443 | foo(); |
444 | #pragma omp target |
445 | #pragma omp teams |
446 | // expected-error@+2 {{expected ')'}} |
447 | // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} |
448 | #pragma omp distribute parallel for simd collapse(4, 8) |
449 | for (i = 0; i < 16; ++i) |
450 | ; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for simd', but found only 1}} |
451 | #pragma omp target |
452 | #pragma omp teams |
453 | // expected-error@+1 {{expression is not an integer constant expression}} |
454 | #pragma omp distribute parallel for simd collapse(2.5) |
455 | for (i = 0; i < 16; ++i) |
456 | ; |
457 | #pragma omp target |
458 | #pragma omp teams |
459 | // expected-error@+1 {{expression is not an integer constant expression}} |
460 | #pragma omp distribute parallel for simd collapse(foo()) |
461 | for (i = 0; i < 16; ++i) |
462 | ; |
463 | #pragma omp target |
464 | #pragma omp teams |
465 | // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}} |
466 | #pragma omp distribute parallel for simd collapse(-5) |
467 | for (i = 0; i < 16; ++i) |
468 | ; |
469 | #pragma omp target |
470 | #pragma omp teams |
471 | // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}} |
472 | #pragma omp distribute parallel for simd collapse(0) |
473 | for (i = 0; i < 16; ++i) |
474 | ; |
475 | #pragma omp target |
476 | #pragma omp teams |
477 | // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}} |
478 | #pragma omp distribute parallel for simd collapse(5 - 5) |
479 | for (i = 0; i < 16; ++i) |
480 | ; |
481 | #pragma omp target |
482 | #pragma omp teams |
483 | #pragma omp distribute parallel for simd collapse(2) |
484 | for (i = 0; i < 16; ++i) |
485 | for (int j = 0; j < 16; ++j) |
486 | // expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}} |
487 | #pragma omp distribute parallel for simd reduction(+ : i, j) |
488 | for (int k = 0; k < 16; ++k) |
489 | i += j; |
490 | } |
491 | |
492 | void test_linear() { |
493 | int i; |
494 | #pragma omp target |
495 | #pragma omp teams |
496 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
497 | #pragma omp distribute parallel for simd linear( |
498 | for (i = 0; i < 16; ++i) |
499 | ; |
500 | #pragma omp target |
501 | #pragma omp teams |
502 | // expected-error@+2 {{expected expression}} |
503 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
504 | #pragma omp distribute parallel for simd linear(, |
505 | for (i = 0; i < 16; ++i) |
506 | ; |
507 | #pragma omp target |
508 | #pragma omp teams |
509 | // expected-error@+2 {{expected expression}} |
510 | // expected-error@+1 {{expected expression}} |
511 | #pragma omp distribute parallel for simd linear(, ) |
512 | for (i = 0; i < 16; ++i) |
513 | ; |
514 | #pragma omp target |
515 | #pragma omp teams |
516 | // expected-error@+1 {{expected expression}} |
517 | #pragma omp distribute parallel for simd linear() |
518 | for (i = 0; i < 16; ++i) |
519 | ; |
520 | #pragma omp target |
521 | #pragma omp teams |
522 | // expected-error@+1 {{expected expression}} |
523 | #pragma omp distribute parallel for simd linear(int) |
524 | for (i = 0; i < 16; ++i) |
525 | ; |
526 | #pragma omp target |
527 | #pragma omp teams |
528 | // expected-error@+1 {{expected variable name}} |
529 | #pragma omp distribute parallel for simd linear(0) |
530 | for (i = 0; i < 16; ++i) |
531 | ; |
532 | #pragma omp target |
533 | #pragma omp teams |
534 | // expected-error@+1 {{use of undeclared identifier 'x'}} |
535 | #pragma omp distribute parallel for simd linear(x) |
536 | for (i = 0; i < 16; ++i) |
537 | ; |
538 | #pragma omp target |
539 | #pragma omp teams |
540 | // expected-error@+2 {{use of undeclared identifier 'x'}} |
541 | // expected-error@+1 {{use of undeclared identifier 'y'}} |
542 | #pragma omp distribute parallel for simd linear(x, y) |
543 | for (i = 0; i < 16; ++i) |
544 | ; |
545 | #pragma omp target |
546 | #pragma omp teams |
547 | // expected-error@+3 {{use of undeclared identifier 'x'}} |
548 | // expected-error@+2 {{use of undeclared identifier 'y'}} |
549 | // expected-error@+1 {{use of undeclared identifier 'z'}} |
550 | #pragma omp distribute parallel for simd linear(x, y, z) |
551 | for (i = 0; i < 16; ++i) |
552 | ; |
553 | } |
554 | |
555 | void test_aligned() { |
556 | int i; |
557 | #pragma omp target |
558 | #pragma omp teams |
559 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
560 | #pragma omp distribute parallel for simd aligned( |
561 | for (i = 0; i < 16; ++i) |
562 | ; |
563 | // expected-error@+2 {{expected expression}} |
564 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
565 | #pragma omp distribute parallel for simd aligned(, |
566 | for (i = 0; i < 16; ++i) |
567 | ; |
568 | #pragma omp target |
569 | #pragma omp teams |
570 | // expected-error@+2 {{expected expression}} |
571 | // expected-error@+1 {{expected expression}} |
572 | #pragma omp distribute parallel for simd aligned(, ) |
573 | for (i = 0; i < 16; ++i) |
574 | ; |
575 | #pragma omp target |
576 | #pragma omp teams |
577 | // expected-error@+1 {{expected expression}} |
578 | #pragma omp distribute parallel for simd aligned() |
579 | for (i = 0; i < 16; ++i) |
580 | ; |
581 | #pragma omp target |
582 | #pragma omp teams |
583 | // expected-error@+1 {{expected expression}} |
584 | #pragma omp distribute parallel for simd aligned(int) |
585 | for (i = 0; i < 16; ++i) |
586 | ; |
587 | #pragma omp target |
588 | #pragma omp teams |
589 | // expected-error@+1 {{expected variable name}} |
590 | #pragma omp distribute parallel for simd aligned(0) |
591 | for (i = 0; i < 16; ++i) |
592 | ; |
593 | #pragma omp target |
594 | #pragma omp teams |
595 | // expected-error@+1 {{use of undeclared identifier 'x'}} |
596 | #pragma omp distribute parallel for simd aligned(x) |
597 | for (i = 0; i < 16; ++i) |
598 | ; |
599 | #pragma omp target |
600 | #pragma omp teams |
601 | // expected-error@+2 {{use of undeclared identifier 'x'}} |
602 | // expected-error@+1 {{use of undeclared identifier 'y'}} |
603 | #pragma omp distribute parallel for simd aligned(x, y) |
604 | for (i = 0; i < 16; ++i) |
605 | ; |
606 | #pragma omp target |
607 | #pragma omp teams |
608 | // expected-error@+3 {{use of undeclared identifier 'x'}} |
609 | // expected-error@+2 {{use of undeclared identifier 'y'}} |
610 | // expected-error@+1 {{use of undeclared identifier 'z'}} |
611 | #pragma omp distribute parallel for simd aligned(x, y, z) |
612 | for (i = 0; i < 16; ++i) |
613 | ; |
614 | |
615 | int *x, y, z[25]; // expected-note 4 {{'y' defined here}} |
616 | #pragma omp target |
617 | #pragma omp teams |
618 | #pragma omp distribute parallel for simd aligned(x) |
619 | for (i = 0; i < 16; ++i) |
620 | ; |
621 | #pragma omp target |
622 | #pragma omp teams |
623 | #pragma omp distribute parallel for simd aligned(z) |
624 | for (i = 0; i < 16; ++i) |
625 | ; |
626 | #pragma omp target |
627 | #pragma omp teams |
628 | // expected-error@+1 {{expected expression}} |
629 | #pragma omp distribute parallel for simd aligned(x :) |
630 | for (i = 0; i < 16; ++i) |
631 | ; |
632 | #pragma omp target |
633 | #pragma omp teams |
634 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
635 | #pragma omp distribute parallel for simd aligned(x :, ) |
636 | for (i = 0; i < 16; ++i) |
637 | ; |
638 | #pragma omp target |
639 | #pragma omp teams |
640 | #pragma omp distribute parallel for simd aligned(x : 1) |
641 | for (i = 0; i < 16; ++i) |
642 | ; |
643 | #pragma omp target |
644 | #pragma omp teams |
645 | #pragma omp distribute parallel for simd aligned(x : 2 * 2) |
646 | for (i = 0; i < 16; ++i) |
647 | ; |
648 | #pragma omp target |
649 | #pragma omp teams |
650 | // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
651 | #pragma omp distribute parallel for simd aligned(x : 1, y) |
652 | for (i = 0; i < 16; ++i) |
653 | ; |
654 | #pragma omp target |
655 | #pragma omp teams |
656 | // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
657 | #pragma omp distribute parallel for simd aligned(x : 1, y, z : 1) |
658 | for (i = 0; i < 16; ++i) |
659 | ; |
660 | |
661 | #pragma omp target |
662 | #pragma omp teams |
663 | // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}} |
664 | #pragma omp distribute parallel for simd aligned(x, y) |
665 | for (i = 0; i < 16; ++i) |
666 | ; |
667 | #pragma omp target |
668 | #pragma omp teams |
669 | // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}} |
670 | #pragma omp distribute parallel for simd aligned(x, y, z) |
671 | for (i = 0; i < 16; ++i) |
672 | ; |
673 | |
674 | #pragma omp target |
675 | #pragma omp teams |
676 | // expected-note@+2 {{defined as aligned}} |
677 | // expected-error@+1 {{a variable cannot appear in more than one aligned clause}} |
678 | #pragma omp distribute parallel for simd aligned(x) aligned(z, x) |
679 | for (i = 0; i < 16; ++i) |
680 | ; |
681 | |
682 | #pragma omp target |
683 | #pragma omp teams |
684 | // expected-note@+3 {{defined as aligned}} |
685 | // expected-error@+2 {{a variable cannot appear in more than one aligned clause}} |
686 | // expected-error@+1 2 {{argument of aligned clause should be array or pointer, not 'int'}} |
687 | #pragma omp distribute parallel for simd aligned(x, y, z) aligned(y, z) |
688 | for (i = 0; i < 16; ++i) |
689 | ; |
690 | } |
691 | |
692 | |
693 | void test_private() { |
694 | int i; |
695 | #pragma omp target |
696 | #pragma omp teams |
697 | // expected-error@+2 {{expected expression}} |
698 | // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
699 | #pragma omp distribute parallel for simd private( |
700 | for (i = 0; i < 16; ++i) |
701 | ; |
702 | #pragma omp target |
703 | #pragma omp teams |
704 | // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} |
705 | // expected-error@+1 2 {{expected expression}} |
706 | #pragma omp distribute parallel for simd private(, |
707 | for (i = 0; i < 16; ++i) |
708 | ; |
709 | #pragma omp target |
710 | #pragma omp teams |
711 | // expected-error@+1 2 {{expected expression}} |
712 | #pragma omp distribute parallel for simd private(, ) |
713 | for (i = 0; i < 16; ++i) |
714 | ; |
715 | #pragma omp target |
716 | #pragma omp teams |
717 | // expected-error@+1 {{expected expression}} |
718 | #pragma omp distribute parallel for simd private() |
719 | for (i = 0; i < 16; ++i) |
720 | ; |
721 | #pragma omp target |
722 | #pragma omp teams |
723 | // expected-error@+1 {{expected expression}} |
724 | #pragma omp distribute parallel for simd private(int) |
725 | for (i = 0; i < 16; ++i) |
726 | ; |
727 | #pragma omp target |
728 | #pragma omp teams |
729 | // expected-error@+1 {{expected variable name}} |
730 | #pragma omp distribute parallel for simd private(0) |
731 | for (i = 0; i < 16; ++i) |
732 | ; |
733 | |
734 | int x, y, z; |
735 | #pragma omp target |
736 | #pragma omp teams |
737 | #pragma omp distribute parallel for simd private(x) |
738 | for (i = 0; i < 16; ++i) |
739 | ; |
740 | #pragma omp target |
741 | #pragma omp teams |
742 | #pragma omp distribute parallel for simd private(x, y) |
743 | for (i = 0; i < 16; ++i) |
744 | ; |
745 | #pragma omp target |
746 | #pragma omp teams |
747 | #pragma omp distribute parallel for simd private(x, y, z) |
748 | for (i = 0; i < 16; ++i) { |
749 | x = y * i + z; |
750 | } |
751 | } |
752 | |
753 | void test_lastprivate() { |
754 | int i; |
755 | #pragma omp target |
756 | #pragma omp teams |
757 | // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} |
758 | // expected-error@+1 {{expected expression}} |
759 | #pragma omp distribute parallel for simd lastprivate( |
760 | for (i = 0; i < 16; ++i) |
761 | ; |
762 | |
763 | #pragma omp target |
764 | #pragma omp teams |
765 | // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} |
766 | // expected-error@+1 2 {{expected expression}} |
767 | #pragma omp distribute parallel for simd lastprivate(, |
768 | for (i = 0; i < 16; ++i) |
769 | ; |
770 | #pragma omp target |
771 | #pragma omp teams |
772 | // expected-error@+1 2 {{expected expression}} |
773 | #pragma omp distribute parallel for simd lastprivate(, ) |
774 | for (i = 0; i < 16; ++i) |
775 | ; |
776 | #pragma omp target |
777 | #pragma omp teams |
778 | // expected-error@+1 {{expected expression}} |
779 | #pragma omp distribute parallel for simd lastprivate() |
780 | for (i = 0; i < 16; ++i) |
781 | ; |
782 | #pragma omp target |
783 | #pragma omp teams |
784 | // expected-error@+1 {{expected expression}} |
785 | #pragma omp distribute parallel for simd lastprivate(int) |
786 | for (i = 0; i < 16; ++i) |
787 | ; |
788 | #pragma omp target |
789 | #pragma omp teams |
790 | // expected-error@+1 {{expected variable name}} |
791 | #pragma omp distribute parallel for simd lastprivate(0) |
792 | for (i = 0; i < 16; ++i) |
793 | ; |
794 | |
795 | int x, y, z; |
796 | #pragma omp target |
797 | #pragma omp teams |
798 | #pragma omp distribute parallel for simd lastprivate(x) |
799 | for (i = 0; i < 16; ++i) |
800 | ; |
801 | #pragma omp target |
802 | #pragma omp teams |
803 | #pragma omp distribute parallel for simd lastprivate(x, y) |
804 | for (i = 0; i < 16; ++i) |
805 | ; |
806 | #pragma omp target |
807 | #pragma omp teams |
808 | #pragma omp distribute parallel for simd lastprivate(x, y, z) |
809 | for (i = 0; i < 16; ++i) |
810 | ; |
811 | } |
812 | |
813 | void test_firstprivate() { |
814 | int i; |
815 | #pragma omp target |
816 | #pragma omp teams |
817 | // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} |
818 | // expected-error@+1 {{expected expression}} |
819 | #pragma omp distribute parallel for simd firstprivate( |
820 | for (i = 0; i < 16; ++i) |
821 | ; |
822 | |
823 | #pragma omp target |
824 | #pragma omp teams |
825 | // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} |
826 | // expected-error@+1 2 {{expected expression}} |
827 | #pragma omp distribute parallel for simd firstprivate(, |
828 | for (i = 0; i < 16; ++i) |
829 | ; |
830 | #pragma omp target |
831 | #pragma omp teams |
832 | // expected-error@+1 2 {{expected expression}} |
833 | #pragma omp distribute parallel for simd firstprivate(, ) |
834 | for (i = 0; i < 16; ++i) |
835 | ; |
836 | #pragma omp target |
837 | #pragma omp teams |
838 | // expected-error@+1 {{expected expression}} |
839 | #pragma omp distribute parallel for simd firstprivate() |
840 | for (i = 0; i < 16; ++i) |
841 | ; |
842 | #pragma omp target |
843 | #pragma omp teams |
844 | // expected-error@+1 {{expected expression}} |
845 | #pragma omp distribute parallel for simd firstprivate(int) |
846 | for (i = 0; i < 16; ++i) |
847 | ; |
848 | #pragma omp target |
849 | #pragma omp teams |
850 | // expected-error@+1 {{expected variable name}} |
851 | #pragma omp distribute parallel for simd firstprivate(0) |
852 | for (i = 0; i < 16; ++i) |
853 | ; |
854 | |
855 | int x, y, z; |
856 | // expected-error@+3 {{lastprivate variable cannot be firstprivate}} expected-note@+3 {{defined as lastprivate}} |
857 | #pragma omp target |
858 | #pragma omp teams |
859 | #pragma omp distribute parallel for simd lastprivate(x) firstprivate(x) |
860 | for (i = 0; i < 16; ++i) |
861 | ; |
862 | // expected-error@+3 2 {{lastprivate variable cannot be firstprivate}} expected-note@+3 2 {{defined as lastprivate}} |
863 | #pragma omp target |
864 | #pragma omp teams |
865 | #pragma omp distribute parallel for simd lastprivate(x, y) firstprivate(x, y) |
866 | for (i = 0; i < 16; ++i) |
867 | ; |
868 | // expected-error@+3 3 {{lastprivate variable cannot be firstprivate}} expected-note@+3 3 {{defined as lastprivate}} |
869 | #pragma omp target |
870 | #pragma omp teams |
871 | #pragma omp distribute parallel for simd lastprivate(x, y, z) firstprivate(x, y, z) |
872 | for (i = 0; i < 16; ++i) |
873 | ; |
874 | } |
875 | |
876 | void test_loop_messages() { |
877 | float a[100], b[100], c[100]; |
878 | #pragma omp target |
879 | #pragma omp teams |
880 | // expected-error@+2 {{variable must be of integer or pointer type}} |
881 | #pragma omp distribute parallel for simd |
882 | for (float fi = 0; fi < 10.0; fi++) { |
883 | c[(int)fi] = a[(int)fi] + b[(int)fi]; |
884 | } |
885 | #pragma omp target |
886 | #pragma omp teams |
887 | // expected-error@+2 {{variable must be of integer or pointer type}} |
888 | #pragma omp distribute parallel for simd |
889 | for (double fi = 0; fi < 10.0; fi++) { |
890 | c[(int)fi] = a[(int)fi] + b[(int)fi]; |
891 | } |
892 | } |
893 | |
894 | |