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