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