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