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