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