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