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