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