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