1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -verify=expected,omp45 %s -Wuninitialized
2 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=50 -verify=expected,omp50,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized
3 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=60 -verify=expected,omp60,omp-clause,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized
4 // RUN: %clang_cc1 -fsyntax-only -fopenmp -verify=expected,omp51,omp-clause,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized
6 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=45 -verify=expected,omp45 %s -Wuninitialized
7 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=50 -verify=expected,omp50,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized
8 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=60 -verify=expected,omp60,omp-clause,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized
9 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify=expected,omp51,omp-clause,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized
12 // expected-note@+1 {{initialize the variable 'x' to silence this warning}}
14 #pragma omp distribute simd
15 for (int i
= 0; i
< 10; ++i
)
16 // expected-warning@+1 {{variable 'x' is uninitialized when used here}}
20 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute simd'}}
21 #pragma omp distribute simd
23 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute simd'}}
24 #pragma omp distribute simd foo
26 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute simd'}}
27 #pragma omp distribute simd safelen(4)
29 void test_no_clause(void) {
33 #pragma omp distribute simd
34 for (i
= 0; i
< 16; ++i
)
39 // expected-error@+2 {{statement after '#pragma omp distribute simd' must be a for loop}}
40 #pragma omp distribute simd
44 void test_branch_protected_scope(void) {
53 #pragma omp distribute simd
54 for (i
= 0; i
< 16; ++i
) {
56 // expected-error@+1 {{use of undeclared label 'L1'}}
59 // expected-error@+1 {{cannot return from OpenMP region}}
70 // expected-error@+1 {{use of undeclared label 'L2'}}
76 void test_invalid_clause(void) {
80 // expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
81 #pragma omp distribute simd foo bar
82 for (i
= 0; i
< 16; ++i
)
86 void test_non_identifiers(void) {
91 // expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
92 #pragma omp distribute simd;
93 for (i
= 0; i
< 16; ++i
)
98 // expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
99 #pragma omp distribute simd private(x);
100 for (i
= 0; i
< 16; ++i
)
105 // expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
106 #pragma omp distribute simd, private(x);
107 for (i
= 0; i
< 16; ++i
)
111 extern int foo(void);
112 void test_safelen(void) {
116 // expected-error@+1 {{expected '('}}
117 #pragma omp distribute simd safelen
118 for (i
= 0; i
< 16; ++i
)
122 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
123 #pragma omp distribute simd safelen(
124 for (i
= 0; i
< 16; ++i
)
128 // expected-error@+1 {{expected expression}}
129 #pragma omp distribute simd safelen()
130 for (i
= 0; i
< 16; ++i
)
134 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
135 #pragma omp distribute simd safelen(,
136 for (i
= 0; i
< 16; ++i
)
140 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
141 #pragma omp distribute simd safelen(, )
142 for (i
= 0; i
< 16; ++i
)
146 // expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
147 // expected-error@+1 {{expected '('}}
148 #pragma omp distribute simd safelen 4)
149 for (i
= 0; i
< 16; ++i
)
153 // expected-error@+2 {{expected ')'}}
154 // expected-note@+1 {{to match this '('}}
155 #pragma omp distribute simd safelen(4
156 for (i
= 0; i
< 16; ++i
)
160 // expected-error@+2 {{expected ')'}}
161 // expected-note@+1 {{to match this '('}}
162 #pragma omp distribute simd safelen(4,
163 for (i
= 0; i
< 16; ++i
)
167 // expected-error@+2 {{expected ')'}}
168 // expected-note@+1 {{to match this '('}}
169 #pragma omp distribute simd safelen(4, )
170 for (i
= 0; i
< 16; ++i
)
174 // xxpected-error@+1 {{expected expression}}
175 #pragma omp distribute simd safelen(4)
176 for (i
= 0; i
< 16; ++i
)
180 // expected-error@+2 {{expected ')'}}
181 // expected-note@+1 {{to match this '('}}
182 #pragma omp distribute simd safelen(4 4)
183 for (i
= 0; i
< 16; ++i
)
187 // expected-error@+2 {{expected ')'}}
188 // expected-note@+1 {{to match this '('}}
189 #pragma omp distribute simd safelen(4, , 4)
190 for (i
= 0; i
< 16; ++i
)
194 #pragma omp distribute simd safelen(4)
195 for (i
= 0; i
< 16; ++i
)
199 // expected-error@+2 {{expected ')'}}
200 // expected-note@+1 {{to match this '('}}
201 #pragma omp distribute simd safelen(4, 8)
202 for (i
= 0; i
< 16; ++i
)
206 // expected-error@+1 {{integer constant expression}}
207 #pragma omp distribute simd safelen(2.5)
208 for (i
= 0; i
< 16; ++i
)
212 // expected-error@+1 {{integer constant expression}}
213 #pragma omp distribute simd safelen(foo())
214 for (i
= 0; i
< 16; ++i
)
218 // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
219 #pragma omp distribute simd safelen(-5)
220 for (i
= 0; i
< 16; ++i
)
224 // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
225 #pragma omp distribute simd safelen(0)
226 for (i
= 0; i
< 16; ++i
)
230 // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
231 #pragma omp distribute simd safelen(5 - 5)
232 for (i
= 0; i
< 16; ++i
)
236 void test_simdlen(void) {
240 // expected-error@+1 {{expected '('}}
241 #pragma omp distribute simd simdlen
242 for (i
= 0; i
< 16; ++i
)
246 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
247 #pragma omp distribute simd simdlen(
248 for (i
= 0; i
< 16; ++i
)
252 // expected-error@+1 {{expected expression}}
253 #pragma omp distribute simd simdlen()
254 for (i
= 0; i
< 16; ++i
)
258 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
259 #pragma omp distribute simd simdlen(,
260 for (i
= 0; i
< 16; ++i
)
264 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
265 #pragma omp distribute simd simdlen(, )
266 for (i
= 0; i
< 16; ++i
)
270 // expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
271 // expected-error@+1 {{expected '('}}
272 #pragma omp distribute simd simdlen 4)
273 for (i
= 0; i
< 16; ++i
)
277 // expected-error@+2 {{expected ')'}}
278 // expected-note@+1 {{to match this '('}}
279 #pragma omp distribute simd simdlen(4
280 for (i
= 0; i
< 16; ++i
)
284 // expected-error@+2 {{expected ')'}}
285 // expected-note@+1 {{to match this '('}}
286 #pragma omp distribute simd simdlen(4,
287 for (i
= 0; i
< 16; ++i
)
291 // expected-error@+2 {{expected ')'}}
292 // expected-note@+1 {{to match this '('}}
293 #pragma omp distribute simd simdlen(4, )
294 for (i
= 0; i
< 16; ++i
)
298 #pragma omp distribute simd simdlen(4)
299 for (i
= 0; i
< 16; ++i
)
303 // expected-error@+2 {{expected ')'}}
304 // expected-note@+1 {{to match this '('}}
305 #pragma omp distribute simd simdlen(4 4)
306 for (i
= 0; i
< 16; ++i
)
310 // expected-error@+2 {{expected ')'}}
311 // expected-note@+1 {{to match this '('}}
312 #pragma omp distribute simd simdlen(4, , 4)
313 for (i
= 0; i
< 16; ++i
)
317 #pragma omp distribute simd simdlen(4)
318 for (i
= 0; i
< 16; ++i
)
322 // expected-error@+2 {{expected ')'}}
323 // expected-note@+1 {{to match this '('}}
324 #pragma omp distribute simd simdlen(4, 8)
325 for (i
= 0; i
< 16; ++i
)
329 // expected-error@+1 {{integer constant expression}}
330 #pragma omp distribute simd simdlen(2.5)
331 for (i
= 0; i
< 16; ++i
)
335 // expected-error@+1 {{integer constant expression}}
336 #pragma omp distribute simd simdlen(foo())
337 for (i
= 0; i
< 16; ++i
)
341 // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
342 #pragma omp distribute simd simdlen(-5)
343 for (i
= 0; i
< 16; ++i
)
347 // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
348 #pragma omp distribute simd simdlen(0)
349 for (i
= 0; i
< 16; ++i
)
353 // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
354 #pragma omp distribute simd simdlen(5 - 5)
355 for (i
= 0; i
< 16; ++i
)
359 void test_safelen_simdlen(void) {
363 // expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}
364 #pragma omp distribute simd simdlen(6) safelen(5)
365 for (i
= 0; i
< 16; ++i
)
370 // expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}
371 #pragma omp distribute simd safelen(5) simdlen(6)
372 for (i
= 0; i
< 16; ++i
)
376 void test_collapse(void) {
380 // expected-error@+1 {{expected '('}}
381 #pragma omp distribute simd collapse
382 for (i
= 0; i
< 16; ++i
)
386 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
387 #pragma omp distribute simd collapse(
388 for (i
= 0; i
< 16; ++i
)
392 // expected-error@+1 {{expected expression}}
393 #pragma omp distribute simd collapse()
394 for (i
= 0; i
< 16; ++i
)
398 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
399 #pragma omp distribute simd collapse(,
400 for (i
= 0; i
< 16; ++i
)
404 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
405 #pragma omp distribute simd collapse(, )
406 for (i
= 0; i
< 16; ++i
)
410 // expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
411 // expected-error@+1 {{expected '('}}
412 #pragma omp distribute simd collapse 4)
413 for (i
= 0; i
< 16; ++i
)
417 // expected-error@+2 {{expected ')'}}
418 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
419 #pragma omp distribute simd collapse(4
420 for (i
= 0; i
< 16; ++i
)
421 // expected-error@+1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
425 // expected-error@+2 {{expected ')'}}
426 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
427 #pragma omp distribute simd collapse(4,
428 for (i
= 0; i
< 16; ++i
)
429 // expected-error@+1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
433 // expected-error@+2 {{expected ')'}}
434 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
435 #pragma omp distribute simd collapse(4, )
436 for (i
= 0; i
< 16; ++i
)
437 // expected-error@+1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
441 // expected-note@+1 {{as specified in 'collapse' clause}}
442 #pragma omp distribute simd collapse(4)
443 for (i
= 0; i
< 16; ++i
)
444 // expected-error@+1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
448 // expected-error@+3 {{expected ')'}}
449 // expected-note@+2 {{to match this '('}}
450 // expected-note@+1 {{as specified in 'collapse' clause}}
451 #pragma omp distribute simd collapse(4 4)
452 for (i
= 0; i
< 16; ++i
)
453 // expected-error@+1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
457 // expected-error@+3 {{expected ')'}}
458 // expected-note@+2 {{to match this '('}}
459 // expected-note@+1 {{as specified in 'collapse' clause}}
460 #pragma omp distribute simd collapse(4, , 4)
461 for (i
= 0; i
< 16; ++i
)
462 // expected-error@+1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
466 #pragma omp distribute simd collapse(4)
467 for (int i1
= 0; i1
< 16; ++i1
)
468 for (int i2
= 0; i2
< 16; ++i2
)
469 for (int i3
= 0; i3
< 16; ++i3
)
470 for (int i4
= 0; i4
< 16; ++i4
)
474 // expected-error@+3 {{expected ')'}}
475 // expected-note@+2 {{to match this '('}}
476 // expected-note@+1 {{as specified in 'collapse' clause}}
477 #pragma omp distribute simd collapse(4, 8)
478 for (i
= 0; i
< 16; ++i
)
479 // expected-error@+1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
483 // expected-error@+1 {{integer constant expression}}
484 #pragma omp distribute simd collapse(2.5)
485 for (i
= 0; i
< 16; ++i
)
489 // expected-error@+1 {{integer constant expression}}
490 #pragma omp distribute simd collapse(foo())
491 for (i
= 0; i
< 16; ++i
)
495 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
496 #pragma omp distribute simd collapse(-5)
497 for (i
= 0; i
< 16; ++i
)
501 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
502 #pragma omp distribute simd collapse(0)
503 for (i
= 0; i
< 16; ++i
)
507 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
508 #pragma omp distribute simd collapse(5 - 5)
509 for (i
= 0; i
< 16; ++i
)
511 // expected-note@+3 2 {{defined as reduction}}
514 #pragma omp distribute simd collapse(2) reduction(+ : i)
515 for (i
= 0; i
< 16; ++i
) // expected-error {{loop iteration variable in the associated loop of 'omp distribute simd' directive may not be reduction, predetermined as lastprivate}}
516 // 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?}}
517 for (int j
= 0; j
< 16; ++j
)
518 // expected-error@+2 2 {{reduction variable must be shared}}
519 // expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}}
520 #pragma omp for reduction(+ : i, j)
521 for (int k
= 0; k
< 16; ++k
)
526 for (i
= 0; i
< 16; ++i
)
527 for (int j
= 0; j
< 16; ++j
)
528 #pragma omp distribute simd reduction(+ : i, j)
529 for (int k
= 0; k
< 16; ++k
)
533 void test_linear(void) {
537 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
538 #pragma omp distribute simd linear(
539 for (i
= 0; i
< 16; ++i
)
543 // expected-error@+2 {{expected expression}}
544 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
545 #pragma omp distribute simd linear(,
546 for (i
= 0; i
< 16; ++i
)
550 // expected-error@+2 {{expected expression}}
551 // expected-error@+1 {{expected expression}}
552 #pragma omp distribute simd linear(, )
553 for (i
= 0; i
< 16; ++i
)
557 // expected-error@+1 {{expected expression}}
558 #pragma omp distribute simd linear()
559 for (i
= 0; i
< 16; ++i
)
563 // expected-error@+1 {{expected expression}}
564 #pragma omp distribute simd linear(int)
565 for (i
= 0; i
< 16; ++i
)
569 // expected-error@+1 {{expected variable name}}
570 #pragma omp distribute simd linear(0)
571 for (i
= 0; i
< 16; ++i
)
575 // expected-error@+1 {{use of undeclared identifier 'x'}}
576 #pragma omp distribute simd linear(x)
577 for (i
= 0; i
< 16; ++i
)
581 // expected-error@+2 {{use of undeclared identifier 'x'}}
582 // expected-error@+1 {{use of undeclared identifier 'y'}}
583 #pragma omp distribute simd linear(x, y)
584 for (i
= 0; i
< 16; ++i
)
588 // expected-error@+3 {{use of undeclared identifier 'x'}}
589 // expected-error@+2 {{use of undeclared identifier 'y'}}
590 // expected-error@+1 {{use of undeclared identifier 'z'}}
591 #pragma omp distribute simd linear(x, y, z)
592 for (i
= 0; i
< 16; ++i
)
596 void test_aligned(void) {
600 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
601 #pragma omp distribute simd aligned(
602 for (i
= 0; i
< 16; ++i
)
606 // expected-error@+2 {{expected expression}}
607 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
608 #pragma omp distribute simd aligned(,
609 for (i
= 0; i
< 16; ++i
)
613 // expected-error@+2 {{expected expression}}
614 // expected-error@+1 {{expected expression}}
615 #pragma omp distribute simd aligned(, )
616 for (i
= 0; i
< 16; ++i
)
620 // expected-error@+1 {{expected expression}}
621 #pragma omp distribute simd aligned()
622 for (i
= 0; i
< 16; ++i
)
626 // expected-error@+1 {{expected expression}}
627 #pragma omp distribute simd aligned(int)
628 for (i
= 0; i
< 16; ++i
)
632 // expected-error@+1 {{expected variable name}}
633 #pragma omp distribute simd aligned(0)
634 for (i
= 0; i
< 16; ++i
)
638 // expected-error@+1 {{use of undeclared identifier 'x'}}
639 #pragma omp distribute simd aligned(x)
640 for (i
= 0; i
< 16; ++i
)
644 // expected-error@+2 {{use of undeclared identifier 'x'}}
645 // expected-error@+1 {{use of undeclared identifier 'y'}}
646 #pragma omp distribute simd aligned(x, y)
647 for (i
= 0; i
< 16; ++i
)
651 // expected-error@+3 {{use of undeclared identifier 'x'}}
652 // expected-error@+2 {{use of undeclared identifier 'y'}}
653 // expected-error@+1 {{use of undeclared identifier 'z'}}
654 #pragma omp distribute simd aligned(x, y, z)
655 for (i
= 0; i
< 16; ++i
)
658 int *x
, y
, z
[25]; // expected-note 4 {{'y' defined here}}
661 #pragma omp distribute simd aligned(x)
662 for (i
= 0; i
< 16; ++i
)
666 #pragma omp distribute simd aligned(z)
667 for (i
= 0; i
< 16; ++i
)
671 // expected-error@+1 {{expected expression}}
672 #pragma omp distribute simd aligned(x :)
673 for (i
= 0; i
< 16; ++i
)
677 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
678 #pragma omp distribute simd aligned(x :, )
679 for (i
= 0; i
< 16; ++i
)
683 #pragma omp distribute simd aligned(x : 1)
684 for (i
= 0; i
< 16; ++i
)
688 #pragma omp distribute simd aligned(x : 2 * 2)
689 for (i
= 0; i
< 16; ++i
)
693 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
694 #pragma omp distribute simd aligned(x : 1, y)
695 for (i
= 0; i
< 16; ++i
)
699 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
700 #pragma omp distribute simd aligned(x : 1, y, z : 1)
701 for (i
= 0; i
< 16; ++i
)
706 // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}
707 #pragma omp distribute simd aligned(x, y)
708 for (i
= 0; i
< 16; ++i
)
712 // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}
713 #pragma omp distribute simd aligned(x, y, z)
714 for (i
= 0; i
< 16; ++i
)
719 // expected-note@+2 {{defined as aligned}}
720 // expected-error@+1 {{a variable cannot appear in more than one aligned clause}}
721 #pragma omp distribute simd aligned(x) aligned(z, x)
722 for (i
= 0; i
< 16; ++i
)
727 // expected-note@+3 {{defined as aligned}}
728 // expected-error@+2 {{a variable cannot appear in more than one aligned clause}}
729 // expected-error@+1 2 {{argument of aligned clause should be array or pointer, not 'int'}}
730 #pragma omp distribute simd aligned(x, y, z) aligned(y, z)
731 for (i
= 0; i
< 16; ++i
)
735 void test_private(void) {
739 // expected-error@+3 {{expected expression}}
740 // expected-error@+2 {{expected ')'}}
741 // expected-note@+1 {{to match this '('}}
742 #pragma omp distribute simd private(
743 for (i
= 0; i
< 16; ++i
)
747 // expected-error@+3 {{expected ')'}}
748 // expected-note@+2 {{to match this '('}}
749 // expected-error@+1 2 {{expected expression}}
750 #pragma omp distribute simd private(,
751 for (i
= 0; i
< 16; ++i
)
755 // expected-error@+1 2 {{expected expression}}
756 #pragma omp distribute simd private(, )
757 for (i
= 0; i
< 16; ++i
)
761 // expected-error@+1 {{expected expression}}
762 #pragma omp distribute simd private()
763 for (i
= 0; i
< 16; ++i
)
767 // expected-error@+1 {{expected expression}}
768 #pragma omp distribute simd private(int)
769 for (i
= 0; i
< 16; ++i
)
773 // expected-error@+1 {{expected variable name}}
774 #pragma omp distribute simd private(0)
775 for (i
= 0; i
< 16; ++i
)
781 #pragma omp distribute simd private(x)
782 for (i
= 0; i
< 16; ++i
)
786 #pragma omp distribute simd private(x, y)
787 for (i
= 0; i
< 16; ++i
)
791 #pragma omp distribute simd private(x, y, z)
792 for (i
= 0; i
< 16; ++i
) {
797 void test_firstprivate(void) {
801 // expected-error@+3 {{expected ')'}}
802 // expected-note@+2 {{to match this '('}}
803 // expected-error@+1 {{expected expression}}
804 #pragma omp distribute simd firstprivate(
805 for (i
= 0; i
< 16; ++i
)
809 void test_lastprivate(void) {
813 // expected-error@+3 {{expected ')'}}
814 // expected-note@+2 {{to match this '('}}
815 // expected-error@+1 {{expected expression}}
816 #pragma omp distribute simd lastprivate(
817 for (i
= 0; i
< 16; ++i
)
822 // expected-error@+3 {{expected ')'}}
823 // expected-note@+2 {{to match this '('}}
824 // expected-error@+1 2 {{expected expression}}
825 #pragma omp distribute simd lastprivate(,
826 for (i
= 0; i
< 16; ++i
)
830 // expected-error@+1 2 {{expected expression}}
831 #pragma omp distribute simd lastprivate(, )
832 for (i
= 0; i
< 16; ++i
)
836 // expected-error@+1 {{expected expression}}
837 #pragma omp distribute simd lastprivate()
838 for (i
= 0; i
< 16; ++i
)
842 // expected-error@+1 {{expected expression}}
843 #pragma omp distribute simd lastprivate(int)
844 for (i
= 0; i
< 16; ++i
)
848 // expected-error@+1 {{expected variable name}}
849 #pragma omp distribute simd lastprivate(0)
850 for (i
= 0; i
< 16; ++i
)
856 #pragma omp distribute simd lastprivate(x)
857 for (i
= 0; i
< 16; ++i
)
861 #pragma omp distribute simd lastprivate(x, y)
862 for (i
= 0; i
< 16; ++i
)
866 #pragma omp distribute simd lastprivate(x, y, z)
867 for (i
= 0; i
< 16; ++i
)
871 void test_reduction(void) {
875 // expected-error@+4 {{expected ')'}}
876 // expected-note@+3 {{to match this '('}}
877 // expected-error@+2 {{expected identifier}}
878 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
879 #pragma omp distribute simd reduction(
880 for (i
= 0; i
< 16; ++i
)
884 // expected-error@+2 {{expected identifier}}
885 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
886 #pragma omp distribute simd reduction()
887 for (i
= 0; i
< 16; ++i
)
891 // expected-error@+2 {{expected expression}}
892 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
893 #pragma omp distribute simd reduction(x)
894 for (i
= 0; i
< 16; ++i
)
898 // expected-error@+1 {{expected identifier}}
899 #pragma omp distribute simd reduction( : x)
900 for (i
= 0; i
< 16; ++i
)
904 // expected-error@+4 {{expected ')'}}
905 // expected-note@+3 {{to match this '('}}
906 // expected-error@+2 {{expected identifier}}
907 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
908 #pragma omp distribute simd reduction(,
909 for (i
= 0; i
< 16; ++i
)
913 // expected-error@+4 {{expected ')'}}
914 // expected-note@+3 {{to match this '('}}
915 // expected-error@+2 {{expected expression}}
916 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
917 #pragma omp distribute simd reduction(+
918 for (i
= 0; i
< 16; ++i
)
923 // expected-error@+3 {{expected ')'}}
924 // expected-note@+2 {{to match this '('}}
925 // expected-error@+1 {{expected expression}}
926 #pragma omp distribute simd reduction(+:
927 for (i
= 0; i
< 16; ++i
)
931 // expected-error@+1 {{expected expression}}
932 #pragma omp distribute simd reduction(+ :)
933 for (i
= 0; i
< 16; ++i
)
937 // expected-error@+1 {{expected expression}}
938 #pragma omp distribute simd reduction(+ :, y)
939 for (i
= 0; i
< 16; ++i
)
943 // expected-error@+1 {{expected expression}}
944 #pragma omp distribute simd reduction(+ : x, + : y)
945 for (i
= 0; i
< 16; ++i
)
949 // expected-error@+1 {{expected identifier}}
950 #pragma omp distribute simd reduction(% : x)
951 for (i
= 0; i
< 16; ++i
)
956 #pragma omp distribute simd reduction(+ : x)
957 for (i
= 0; i
< 16; ++i
)
961 #pragma omp distribute simd reduction(* : x)
962 for (i
= 0; i
< 16; ++i
)
966 // omp60-error@+1 {{incorrect reduction identifier, expected one of '+', '*', '&', '|', '^', '&&', '||', 'min' or 'max' or declare reduction for type 'int'}}
967 #pragma omp distribute simd reduction(- : x)
968 for (i
= 0; i
< 16; ++i
)
972 #pragma omp distribute simd reduction(& : x)
973 for (i
= 0; i
< 16; ++i
)
977 #pragma omp distribute simd reduction(| : x)
978 for (i
= 0; i
< 16; ++i
)
982 #pragma omp distribute simd reduction(^ : x)
983 for (i
= 0; i
< 16; ++i
)
987 #pragma omp distribute simd reduction(&& : x)
988 for (i
= 0; i
< 16; ++i
)
992 #pragma omp distribute simd reduction(|| : x)
993 for (i
= 0; i
< 16; ++i
)
997 #pragma omp distribute simd reduction(max : x)
998 for (i
= 0; i
< 16; ++i
)
1002 #pragma omp distribute simd reduction(min : x)
1003 for (i
= 0; i
< 16; ++i
)
1011 // expected-error@+1 {{expected variable name}}
1012 #pragma omp distribute simd reduction(+ : X.x)
1013 for (i
= 0; i
< 16; ++i
)
1017 // expected-error@+1 {{expected variable name}}
1018 #pragma omp distribute simd reduction(+ : x + x)
1019 for (i
= 0; i
< 16; ++i
)
1023 void test_loop_messages(void) {
1024 float a
[100], b
[100], c
[100];
1027 // expected-error@+2 {{variable must be of integer or pointer type}}
1028 #pragma omp distribute simd
1029 for (float fi
= 0; fi
< 10.0; fi
++) {
1030 c
[(int)fi
] = a
[(int)fi
] + b
[(int)fi
];
1034 // expected-error@+2 {{variable must be of integer or pointer type}}
1035 #pragma omp distribute simd
1036 for (double fi
= 0; fi
< 10.0; fi
++) {
1037 c
[(int)fi
] = a
[(int)fi
] + b
[(int)fi
];
1041 void linear_modifiers(int argc
) {
1045 #pragma omp distribute simd linear(k)
1046 for (k
= 0; k
< argc
; ++k
) ++k
;
1049 // omp60-error@+1 {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}}
1050 #pragma omp distribute simd linear(val(k))
1051 for (k
= 0; k
< argc
; ++k
) ++k
;
1054 // omp60-error@+2 {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}}
1055 // expected-error@+1 {{expected 'val' modifier}}
1056 #pragma omp distribute simd linear(uval(k))
1057 for (k
= 0; k
< argc
; ++k
) ++k
;
1060 // omp60-error@+2 {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}}
1061 // expected-error@+1 {{expected 'val' modifier}}
1062 #pragma omp distribute simd linear(ref(k))
1063 for (k
= 0; k
< argc
; ++k
) ++k
;
1066 // omp60-error@+2 {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}}
1067 // expected-error@+1 {{expected 'val' modifier}}
1068 #pragma omp distribute simd linear(foo(k))
1069 for (k
= 0; k
< argc
; ++k
) ++k
;
1072 void test_nontemporal(void) {
1074 // omp45-error@+4 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1075 // expected-error@+3 {{expected expression}}
1076 // expected-error@+2 {{expected ')'}}
1077 // expected-note@+1 {{to match this '('}}
1078 #pragma omp distribute simd nontemporal(
1079 for (i
= 0; i
< 16; ++i
)
1081 // omp45-error@+4 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1082 // expected-error@+3 2 {{expected expression}}
1083 // expected-error@+2 {{expected ')'}}
1084 // expected-note@+1 {{to match this '('}}
1085 #pragma omp distribute simd nontemporal(,
1086 for (i
= 0; i
< 16; ++i
)
1088 // omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1089 // expected-error@+1 2 {{expected expression}}
1090 #pragma omp distribute simd nontemporal(, )
1091 for (i
= 0; i
< 16; ++i
)
1093 // omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1094 // expected-error@+1 {{expected expression}}
1095 #pragma omp distribute simd nontemporal()
1096 for (i
= 0; i
< 16; ++i
)
1098 // omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1099 // expected-error@+1 {{expected expression}}
1100 #pragma omp distribute simd nontemporal(int)
1101 for (i
= 0; i
< 16; ++i
)
1103 // omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1104 // omp50-and-later-var-error@+1 {{expected variable name}}
1105 #pragma omp distribute simd nontemporal(0)
1106 for (i
= 0; i
< 16; ++i
)
1108 // omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1109 // expected-error@+1 {{use of undeclared identifier 'x'}}
1110 #pragma omp distribute simd nontemporal(x)
1111 for (i
= 0; i
< 16; ++i
)
1113 // expected-error@+3 {{use of undeclared identifier 'x'}}
1114 // omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1115 // expected-error@+1 {{use of undeclared identifier 'y'}}
1116 #pragma omp distribute simd nontemporal(x, y)
1117 for (i
= 0; i
< 16; ++i
)
1119 // expected-error@+4 {{use of undeclared identifier 'x'}}
1120 // expected-error@+3 {{use of undeclared identifier 'y'}}
1121 // omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1122 // expected-error@+1 {{use of undeclared identifier 'z'}}
1123 #pragma omp distribute simd nontemporal(x, y, z)
1124 for (i
= 0; i
< 16; ++i
)
1128 // omp45-error@+4 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1129 // expected-error@+3 {{expected ',' or ')' in 'nontemporal' clause}}
1130 // expected-error@+2 {{expected ')'}}
1131 // expected-note@+1 {{to match this '('}}
1132 #pragma omp distribute simd nontemporal(x :)
1133 for (i
= 0; i
< 16; ++i
)
1135 // omp45-error@+4 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1136 // expected-error@+3 {{expected ')'}}
1137 // expected-note@+2 {{to match this '('}}
1138 // expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}}
1139 #pragma omp distribute simd nontemporal(x :, )
1140 for (i
= 0; i
< 16; ++i
)
1143 // omp50-temporal-note@+3 {{defined as nontemporal}}
1144 // omp-50-and-later-temporal-error@+2 {{a variable cannot appear in more than one nontemporal clause}}
1145 // omp45-error@+1 2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1146 #pragma omp distribute simd nontemporal(x) nontemporal(x)
1147 for (i
= 0; i
< 16; ++i
)
1150 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1151 #pragma omp distribute simd private(x) nontemporal(x)
1152 for (i
= 0; i
< 16; ++i
)
1155 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1156 #pragma omp distribute simd nontemporal(x) private(x)
1157 for (i
= 0; i
< 16; ++i
)
1160 // omp45-error@+3 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1161 // expected-note@+2 {{to match this '('}}
1162 // expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}}
1163 #pragma omp distribute simd nontemporal(x, y : 0)
1164 for (i
= 0; i
< 16; ++i
)
1167 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1168 #pragma omp distribute simd nontemporal(x) lastprivate(x)
1169 for (i
= 0; i
< 16; ++i
)
1172 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
1173 #pragma omp distribute simd lastprivate(x) nontemporal(x)
1174 for (i
= 0; i
< 16; ++i
)
1176 // omp45-error@+2 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
1177 // expected-error@+1 {{expected '(' after 'order'}}
1178 #pragma omp distribute simd order
1179 for (int i
= 0; i
< 10; ++i
)
1181 // omp-50-and-later-error@+4 {{expected 'concurrent' in OpenMP clause 'order'}}
1182 // expected-note@+3 {{to match this '('}}
1183 // expected-error@+2 {{expected ')'}}
1184 // omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
1185 #pragma omp distribute simd order(
1186 for (int i
= 0; i
< 10; ++i
)
1188 // omp-50-and-later-error@+4 {{expected 'concurrent' in OpenMP clause 'order'}}
1189 // expected-note@+3 {{to match this '('}}
1190 // expected-error@+2 {{expected ')'}}
1191 // omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
1192 #pragma omp distribute simd order(none
1193 for (int i
= 0; i
< 10; ++i
)
1195 // expected-note@+3 {{to match this '('}}
1196 // expected-error@+2 {{expected ')'}}
1197 // omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
1198 #pragma omp distribute simd order(concurrent
1199 for (int i
= 0; i
< 10; ++i
)
1201 // omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
1202 #pragma omp distribute simd order(concurrent)
1203 for (int i
= 0; i
< 10; ++i
)
1205 // omp-50-and-later-error@+2 {{expected 'concurrent' in OpenMP clause 'order'}}
1206 // omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
1207 #pragma omp distribute simd order(unconstrained:)
1208 for (int i
= 0; i
< 10; ++i
)
1210 // omp50-error@+4 {{expected 'concurrent' in OpenMP clause 'order'}}
1211 // expected-note@+3 {{to match this '('}}
1212 // expected-error@+2 {{expected ')'}}
1213 // omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
1214 #pragma omp distribute simd order(reproducible:concurrent
1215 for (int i
= 0; i
< 10; ++i
)
1217 // omp50-error@+2 {{expected 'concurrent' in OpenMP clause 'order'}}
1218 // omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
1219 #pragma omp distribute simd order(reproducible:concurrent)
1220 for (int i
= 0; i
< 10; ++i
)
1222 // omp50-error@+2 {{expected 'concurrent' in OpenMP clause 'order'}}
1223 // omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
1224 #pragma omp distribute simd order(unconstrained:concurrent)
1225 for (int i
= 0; i
< 10; ++i
)
1227 // omp-clause-error@+2 {{directive '#pragma omp distribute simd' cannot contain more than one 'order' clause}}
1228 // omp45-error@+1 2 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
1229 #pragma omp distribute simd order(concurrent) order(concurrent)
1230 for (int i
= 0; i
< 10; ++i
)