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