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