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