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