]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/OpenMP/parallel_for_simd_misc_messages.c
Vendor import of clang trunk r338150:
[FreeBSD/FreeBSD.git] / test / OpenMP / parallel_for_simd_misc_messages.c
1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s
2
3 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify %s
4
5 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp parallel for simd'}}
6 #pragma omp parallel for simd
7
8 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp parallel for simd'}}
9 #pragma omp parallel for simd foo
10
11 void test_no_clause() {
12   int i;
13 #pragma omp parallel for simd
14   for (i = 0; i < 16; ++i)
15     ;
16
17 // expected-error@+2 {{statement after '#pragma omp parallel for simd' must be a for loop}}
18 #pragma omp parallel for simd
19   ++i;
20 }
21
22 void test_branch_protected_scope() {
23   int i = 0;
24 L1:
25   ++i;
26
27   int x[24];
28
29 #pragma omp parallel
30 #pragma omp parallel for simd
31   for (i = 0; i < 16; ++i) {
32     if (i == 5)
33       goto L1; // expected-error {{use of undeclared label 'L1'}}
34     else if (i == 6)
35       return; // expected-error {{cannot return from OpenMP region}}
36     else if (i == 7)
37       goto L2;
38     else if (i == 8) {
39     L2:
40       x[i]++;
41     }
42   }
43
44   if (x[0] == 0)
45     goto L2; // expected-error {{use of undeclared label 'L2'}}
46   else if (x[1] == 1)
47     goto L1;
48 }
49
50 void test_invalid_clause() {
51   int i;
52 #pragma omp parallel
53 // expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}
54 #pragma omp parallel for simd foo bar
55   for (i = 0; i < 16; ++i)
56     ;
57 }
58
59 void test_non_identifiers() {
60   int i, x;
61
62 #pragma omp parallel
63 // expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}
64 #pragma omp parallel for simd;
65   for (i = 0; i < 16; ++i)
66     ;
67 #pragma omp parallel
68 // expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}
69 #pragma omp parallel for simd linear(x);
70   for (i = 0; i < 16; ++i)
71     ;
72
73 #pragma omp parallel
74 // expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}
75 #pragma omp parallel for simd private(x);
76   for (i = 0; i < 16; ++i)
77     ;
78
79 #pragma omp parallel
80 // expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}
81 #pragma omp parallel for simd, private(x);
82   for (i = 0; i < 16; ++i)
83     ;
84 }
85
86 extern int foo();
87 void test_safelen() {
88   int i;
89 // expected-error@+1 {{expected '('}}
90 #pragma omp parallel for simd safelen
91   for (i = 0; i < 16; ++i)
92     ;
93 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
94 #pragma omp parallel for simd safelen(
95   for (i = 0; i < 16; ++i)
96     ;
97 // expected-error@+1 {{expected expression}}
98 #pragma omp parallel for simd safelen()
99   for (i = 0; i < 16; ++i)
100     ;
101 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
102 #pragma omp parallel for simd safelen(,
103   for (i = 0; i < 16; ++i)
104     ;
105 // expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
106 #pragma omp parallel for simd safelen(, )
107   for (i = 0; i < 16; ++i)
108     ;
109 // expected-warning@+2 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}
110 // expected-error@+1 {{expected '('}}
111 #pragma omp parallel for simd safelen 4)
112   for (i = 0; i < 16; ++i)
113     ;
114 // expected-error@+2 {{expected ')'}}
115 // expected-note@+1 {{to match this '('}}
116 #pragma omp parallel for simd safelen(4
117   for (i = 0; i < 16; ++i)
118     ;
119 // expected-error@+2 {{expected ')'}}
120 // expected-note@+1 {{to match this '('}}
121 #pragma omp parallel for simd safelen(4,
122   for (i = 0; i < 16; ++i)
123     ;
124 // expected-error@+2 {{expected ')'}}
125 // expected-note@+1 {{to match this '('}}
126 #pragma omp parallel for simd safelen(4, )
127   for (i = 0; i < 16; ++i)
128     ;
129 #pragma omp parallel for simd safelen(4)
130   for (i = 0; i < 16; ++i)
131     ;
132 // expected-error@+2 {{expected ')'}}
133 // expected-note@+1 {{to match this '('}}
134 #pragma omp parallel for simd safelen(4 4)
135   for (i = 0; i < 16; ++i)
136     ;
137 // expected-error@+2 {{expected ')'}}
138 // expected-note@+1 {{to match this '('}}
139 #pragma omp parallel for simd safelen(4, , 4)
140   for (i = 0; i < 16; ++i)
141     ;
142 #pragma omp parallel for simd safelen(4)
143   for (i = 0; i < 16; ++i)
144     ;
145 // expected-error@+2 {{expected ')'}}
146 // expected-note@+1 {{to match this '('}}
147 #pragma omp parallel for simd safelen(4, 8)
148   for (i = 0; i < 16; ++i)
149     ;
150 // expected-error@+1 {{expression is not an integer constant expression}}
151 #pragma omp parallel for simd safelen(2.5)
152   for (i = 0; i < 16; ++i)
153     ;
154 // expected-error@+1 {{expression is not an integer constant expression}}
155 #pragma omp parallel for simd safelen(foo())
156   for (i = 0; i < 16; ++i)
157     ;
158 // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
159 #pragma omp parallel for simd safelen(-5)
160   for (i = 0; i < 16; ++i)
161     ;
162 // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
163 #pragma omp parallel for simd safelen(0)
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 parallel for simd safelen(5 - 5)
168   for (i = 0; i < 16; ++i)
169     ;
170 }
171
172 void test_simdlen() {
173   int i;
174 // expected-error@+1 {{expected '('}}
175 #pragma omp parallel for simd simdlen
176   for (i = 0; i < 16; ++i)
177     ;
178 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
179 #pragma omp parallel for simd simdlen(
180   for (i = 0; i < 16; ++i)
181     ;
182 // expected-error@+1 {{expected expression}}
183 #pragma omp parallel for 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 parallel for simd simdlen(,
188   for (i = 0; i < 16; ++i)
189     ;
190 // expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
191 #pragma omp parallel for simd simdlen(, )
192   for (i = 0; i < 16; ++i)
193     ;
194 // expected-warning@+2 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}
195 // expected-error@+1 {{expected '('}}
196 #pragma omp parallel for simd simdlen 4)
197   for (i = 0; i < 16; ++i)
198     ;
199 // expected-error@+2 {{expected ')'}}
200 // expected-note@+1 {{to match this '('}}
201 #pragma omp parallel for simd simdlen(4
202   for (i = 0; i < 16; ++i)
203     ;
204 // expected-error@+2 {{expected ')'}}
205 // expected-note@+1 {{to match this '('}}
206 #pragma omp parallel for 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 parallel for simd simdlen(4, )
212   for (i = 0; i < 16; ++i)
213     ;
214 #pragma omp parallel for 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 parallel for simd simdlen(4 4)
220   for (i = 0; i < 16; ++i)
221     ;
222 // expected-error@+2 {{expected ')'}}
223 // expected-note@+1 {{to match this '('}}
224 #pragma omp parallel for simd simdlen(4, , 4)
225   for (i = 0; i < 16; ++i)
226     ;
227 #pragma omp parallel for simd simdlen(4)
228   for (i = 0; i < 16; ++i)
229     ;
230 // expected-error@+2 {{expected ')'}}
231 // expected-note@+1 {{to match this '('}}
232 #pragma omp parallel for simd simdlen(4, 8)
233   for (i = 0; i < 16; ++i)
234     ;
235 // expected-error@+1 {{expression is not an integer constant expression}}
236 #pragma omp parallel for simd simdlen(2.5)
237   for (i = 0; i < 16; ++i)
238     ;
239 // expected-error@+1 {{expression is not an integer constant expression}}
240 #pragma omp parallel for simd simdlen(foo())
241   for (i = 0; i < 16; ++i)
242     ;
243 // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
244 #pragma omp parallel for simd simdlen(-5)
245   for (i = 0; i < 16; ++i)
246     ;
247 // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
248 #pragma omp parallel for simd simdlen(0)
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 parallel for simd simdlen(5 - 5)
253   for (i = 0; i < 16; ++i)
254     ;
255 }
256
257 void test_safelen_simdlen() {
258   int i;
259 // expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}
260 #pragma omp parallel for simd simdlen(6) safelen(5)
261   for (i = 0; i < 16; ++i)
262     ;
263 // expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}
264 #pragma omp parallel for simd safelen(5) simdlen(6)
265   for (i = 0; i < 16; ++i)
266     ;
267 }
268
269 void test_collapse() {
270   int i;
271 #pragma omp parallel
272 // expected-error@+1 {{expected '('}}
273 #pragma omp parallel for simd collapse
274   for (i = 0; i < 16; ++i)
275     ;
276 #pragma omp parallel
277 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
278 #pragma omp parallel for simd collapse(
279   for (i = 0; i < 16; ++i)
280     ;
281 #pragma omp parallel
282 // expected-error@+1 {{expected expression}}
283 #pragma omp parallel for simd collapse()
284   for (i = 0; i < 16; ++i)
285     ;
286 #pragma omp parallel
287 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
288 #pragma omp parallel for simd collapse(,
289   for (i = 0; i < 16; ++i)
290     ;
291 #pragma omp parallel
292 // expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
293 #pragma omp parallel for simd collapse(, )
294   for (i = 0; i < 16; ++i)
295     ;
296 #pragma omp parallel
297 // expected-warning@+2 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}
298 // expected-error@+1 {{expected '('}}
299 #pragma omp parallel for simd collapse 4)
300   for (i = 0; i < 16; ++i)
301     ;
302 #pragma omp parallel
303 // expected-error@+2 {{expected ')'}}
304 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
305 #pragma omp parallel for simd collapse(4
306   for (i = 0; i < 16; ++i)
307     ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}}
308 #pragma omp parallel
309 // expected-error@+2 {{expected ')'}}
310 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
311 #pragma omp parallel for simd collapse(4,
312   for (i = 0; i < 16; ++i)
313     ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}}
314 #pragma omp parallel
315 // expected-error@+2 {{expected ')'}}
316 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
317 #pragma omp parallel for simd collapse(4, )
318   for (i = 0; i < 16; ++i)
319     ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}}
320 #pragma omp parallel
321 // expected-note@+1 {{as specified in 'collapse' clause}}
322 #pragma omp parallel for simd collapse(4)
323   for (i = 0; i < 16; ++i)
324     ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}}
325 #pragma omp parallel
326 // expected-error@+2 {{expected ')'}}
327 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
328 #pragma omp parallel for simd collapse(4 4)
329   for (i = 0; i < 16; ++i)
330     ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}}
331 #pragma omp parallel
332 // expected-error@+2 {{expected ')'}}
333 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
334 #pragma omp parallel for simd collapse(4, , 4)
335   for (i = 0; i < 16; ++i)
336     ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}}
337 #pragma omp parallel
338 #pragma omp parallel for simd collapse(4)
339   for (int i1 = 0; i1 < 16; ++i1)
340     for (int i2 = 0; i2 < 16; ++i2)
341       for (int i3 = 0; i3 < 16; ++i3)
342         for (int i4 = 0; i4 < 16; ++i4)
343           foo();
344 #pragma omp parallel
345 // expected-error@+2 {{expected ')'}}
346 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
347 #pragma omp parallel for simd collapse(4, 8)
348   for (i = 0; i < 16; ++i)
349     ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}}
350 #pragma omp parallel
351 // expected-error@+1 {{expression is not an integer constant expression}}
352 #pragma omp parallel for simd collapse(2.5)
353   for (i = 0; i < 16; ++i)
354     ;
355 #pragma omp parallel
356 // expected-error@+1 {{expression is not an integer constant expression}}
357 #pragma omp parallel for simd collapse(foo())
358   for (i = 0; i < 16; ++i)
359     ;
360 #pragma omp parallel
361 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
362 #pragma omp parallel for simd collapse(-5)
363   for (i = 0; i < 16; ++i)
364     ;
365 #pragma omp parallel
366 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
367 #pragma omp parallel for simd collapse(0)
368   for (i = 0; i < 16; ++i)
369     ;
370 #pragma omp parallel
371 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
372 #pragma omp parallel for simd collapse(5 - 5)
373   for (i = 0; i < 16; ++i)
374     ;
375 #pragma omp parallel
376 #pragma omp parallel for simd collapse(2)
377   for (i = 0; i < 16; ++i)
378     for (int j = 0; j < 16; ++j)
379 // expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}}
380 #pragma omp parallel for simd reduction(+ : i, j)
381       for (int k = 0; k < 16; ++k)
382         i += j;
383 }
384
385 void test_linear() {
386   int i;
387 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
388 #pragma omp parallel for simd linear(
389   for (i = 0; i < 16; ++i)
390     ;
391 // expected-error@+2 {{expected expression}}
392 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
393 #pragma omp parallel for simd linear(,
394   for (i = 0; i < 16; ++i)
395     ;
396 // expected-error@+2 {{expected expression}}
397 // expected-error@+1 {{expected expression}}
398 #pragma omp parallel for simd linear(, )
399   for (i = 0; i < 16; ++i)
400     ;
401 // expected-error@+1 {{expected expression}}
402 #pragma omp parallel for simd linear()
403   for (i = 0; i < 16; ++i)
404     ;
405 // expected-error@+1 {{expected expression}}
406 #pragma omp parallel for simd linear(int)
407   for (i = 0; i < 16; ++i)
408     ;
409 // expected-error@+1 {{expected variable name}}
410 #pragma omp parallel for simd linear(0)
411   for (i = 0; i < 16; ++i)
412     ;
413 // expected-error@+1 {{use of undeclared identifier 'x'}}
414 #pragma omp parallel for simd linear(x)
415   for (i = 0; i < 16; ++i)
416     ;
417 // expected-error@+2 {{use of undeclared identifier 'x'}}
418 // expected-error@+1 {{use of undeclared identifier 'y'}}
419 #pragma omp parallel for simd linear(x, y)
420   for (i = 0; i < 16; ++i)
421     ;
422 // expected-error@+3 {{use of undeclared identifier 'x'}}
423 // expected-error@+2 {{use of undeclared identifier 'y'}}
424 // expected-error@+1 {{use of undeclared identifier 'z'}}
425 #pragma omp parallel for simd linear(x, y, z)
426   for (i = 0; i < 16; ++i)
427     ;
428
429   int x, y;
430 // expected-error@+1 {{expected expression}}
431 #pragma omp parallel for simd linear(x :)
432   for (i = 0; i < 16; ++i)
433     ;
434 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
435 #pragma omp parallel for simd linear(x :, )
436   for (i = 0; i < 16; ++i)
437     ;
438 #pragma omp parallel for simd linear(x : 1)
439   for (i = 0; i < 16; ++i)
440     ;
441 #pragma omp parallel for simd linear(x : 2 * 2)
442   for (i = 0; i < 16; ++i)
443     ;
444 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
445 #pragma omp parallel for simd linear(x : 1, y)
446   for (i = 0; i < 16; ++i)
447     ;
448 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
449 #pragma omp parallel for simd linear(x : 1, y, z : 1)
450   for (i = 0; i < 16; ++i)
451     ;
452
453 // expected-note@+2 {{defined as linear}}
454 // expected-error@+1 {{linear variable cannot be linear}}
455 #pragma omp parallel for simd linear(x) linear(x)
456   for (i = 0; i < 16; ++i)
457     ;
458
459 // expected-note@+2 {{defined as private}}
460 // expected-error@+1 {{private variable cannot be linear}}
461 #pragma omp parallel for simd private(x) linear(x)
462   for (i = 0; i < 16; ++i)
463     ;
464
465 // expected-note@+2 {{defined as linear}}
466 // expected-error@+1 {{linear variable cannot be private}}
467 #pragma omp parallel for simd linear(x) private(x)
468   for (i = 0; i < 16; ++i)
469     ;
470
471 // expected-warning@+1 {{zero linear step (x and other variables in clause should probably be const)}}
472 #pragma omp parallel for simd linear(x, y : 0)
473   for (i = 0; i < 16; ++i)
474     ;
475
476 // expected-note@+2 {{defined as linear}}
477 // expected-error@+1 {{linear variable cannot be lastprivate}}
478 #pragma omp parallel for simd linear(x) lastprivate(x)
479   for (i = 0; i < 16; ++i)
480     ;
481
482 #pragma omp parallel
483 // expected-note@+2 {{defined as lastprivate}}
484 // expected-error@+1 {{lastprivate variable cannot be linear}}
485 #pragma omp parallel for simd lastprivate(x) linear(x)
486   for (i = 0; i < 16; ++i)
487     ;
488 }
489
490 void test_aligned() {
491   int i;
492 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
493 #pragma omp parallel for 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 parallel for 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 parallel for simd aligned(, )
504   for (i = 0; i < 16; ++i)
505     ;
506 // expected-error@+1 {{expected expression}}
507 #pragma omp parallel for simd aligned()
508   for (i = 0; i < 16; ++i)
509     ;
510 // expected-error@+1 {{expected expression}}
511 #pragma omp parallel for simd aligned(int)
512   for (i = 0; i < 16; ++i)
513     ;
514 // expected-error@+1 {{expected variable name}}
515 #pragma omp parallel for simd aligned(0)
516   for (i = 0; i < 16; ++i)
517     ;
518 // expected-error@+1 {{use of undeclared identifier 'x'}}
519 #pragma omp parallel for 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 parallel for 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 parallel for 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 parallel for simd aligned(x)
536   for (i = 0; i < 16; ++i)
537     ;
538 #pragma omp parallel for simd aligned(z)
539   for (i = 0; i < 16; ++i)
540     ;
541 // expected-error@+1 {{expected expression}}
542 #pragma omp parallel for 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 parallel for simd aligned(x :, )
547   for (i = 0; i < 16; ++i)
548     ;
549 #pragma omp parallel for simd aligned(x : 1)
550   for (i = 0; i < 16; ++i)
551     ;
552 #pragma omp parallel for 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 parallel for 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 parallel for 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 parallel for 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 parallel for 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 parallel for 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 parallel for simd aligned(x, y, z) aligned(y, z)
583   for (i = 0; i < 16; ++i)
584     ;
585 }
586
587
588 void test_private() {
589   int i;
590 #pragma omp parallel
591 // expected-error@+2 {{expected expression}}
592 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
593 #pragma omp parallel for simd private(
594   for (i = 0; i < 16; ++i)
595     ;
596 #pragma omp parallel
597 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
598 // expected-error@+1 2 {{expected expression}}
599 #pragma omp parallel for simd private(,
600   for (i = 0; i < 16; ++i)
601     ;
602 #pragma omp parallel
603 // expected-error@+1 2 {{expected expression}}
604 #pragma omp parallel for simd private(, )
605   for (i = 0; i < 16; ++i)
606     ;
607 #pragma omp parallel
608 // expected-error@+1 {{expected expression}}
609 #pragma omp parallel for simd private()
610   for (i = 0; i < 16; ++i)
611     ;
612 #pragma omp parallel
613 // expected-error@+1 {{expected expression}}
614 #pragma omp parallel for simd private(int)
615   for (i = 0; i < 16; ++i)
616     ;
617 #pragma omp parallel
618 // expected-error@+1 {{expected variable name}}
619 #pragma omp parallel for simd private(0)
620   for (i = 0; i < 16; ++i)
621     ;
622
623   int x, y, z;
624 #pragma omp parallel
625 #pragma omp parallel for simd private(x)
626   for (i = 0; i < 16; ++i)
627     ;
628 #pragma omp parallel
629 #pragma omp parallel for simd private(x, y)
630   for (i = 0; i < 16; ++i)
631     ;
632 #pragma omp parallel
633 #pragma omp parallel for simd private(x, y, z)
634   for (i = 0; i < 16; ++i) {
635     x = y * i + z;
636   }
637 }
638
639 void test_lastprivate() {
640   int i;
641 #pragma omp parallel
642 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
643 // expected-error@+1 {{expected expression}}
644 #pragma omp parallel for simd lastprivate(
645   for (i = 0; i < 16; ++i)
646     ;
647
648 #pragma omp parallel
649 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
650 // expected-error@+1 2 {{expected expression}}
651 #pragma omp parallel for simd lastprivate(,
652   for (i = 0; i < 16; ++i)
653     ;
654 #pragma omp parallel
655 // expected-error@+1 2 {{expected expression}}
656 #pragma omp parallel for simd lastprivate(, )
657   for (i = 0; i < 16; ++i)
658     ;
659 #pragma omp parallel
660 // expected-error@+1 {{expected expression}}
661 #pragma omp parallel for simd lastprivate()
662   for (i = 0; i < 16; ++i)
663     ;
664 #pragma omp parallel
665 // expected-error@+1 {{expected expression}}
666 #pragma omp parallel for simd lastprivate(int)
667   for (i = 0; i < 16; ++i)
668     ;
669 #pragma omp parallel
670 // expected-error@+1 {{expected variable name}}
671 #pragma omp parallel for simd lastprivate(0)
672   for (i = 0; i < 16; ++i)
673     ;
674
675   int x, y, z;
676 #pragma omp parallel
677 #pragma omp parallel for simd lastprivate(x)
678   for (i = 0; i < 16; ++i)
679     ;
680 #pragma omp parallel
681 #pragma omp parallel for simd lastprivate(x, y)
682   for (i = 0; i < 16; ++i)
683     ;
684 #pragma omp parallel
685 #pragma omp parallel for simd lastprivate(x, y, z)
686   for (i = 0; i < 16; ++i)
687     ;
688 }
689
690 void test_firstprivate() {
691   int i;
692 #pragma omp parallel
693 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
694 // expected-error@+1 {{expected expression}}
695 #pragma omp parallel for simd firstprivate(
696   for (i = 0; i < 16; ++i)
697     ;
698
699 #pragma omp parallel
700 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
701 // expected-error@+1 2 {{expected expression}}
702 #pragma omp parallel for simd firstprivate(,
703   for (i = 0; i < 16; ++i)
704     ;
705 #pragma omp parallel
706 // expected-error@+1 2 {{expected expression}}
707 #pragma omp parallel for simd firstprivate(, )
708   for (i = 0; i < 16; ++i)
709     ;
710 #pragma omp parallel
711 // expected-error@+1 {{expected expression}}
712 #pragma omp parallel for simd firstprivate()
713   for (i = 0; i < 16; ++i)
714     ;
715 #pragma omp parallel
716 // expected-error@+1 {{expected expression}}
717 #pragma omp parallel for simd firstprivate(int)
718   for (i = 0; i < 16; ++i)
719     ;
720 #pragma omp parallel
721 // expected-error@+1 {{expected variable name}}
722 #pragma omp parallel for simd firstprivate(0)
723   for (i = 0; i < 16; ++i)
724     ;
725
726   int x, y, z;
727 #pragma omp parallel
728 #pragma omp parallel for simd lastprivate(x) firstprivate(x)
729   for (i = 0; i < 16; ++i)
730     ;
731 #pragma omp parallel
732 #pragma omp parallel for simd lastprivate(x, y) firstprivate(x, y)
733   for (i = 0; i < 16; ++i)
734     ;
735 #pragma omp parallel
736 #pragma omp parallel for simd lastprivate(x, y, z) firstprivate(x, y, z)
737   for (i = 0; i < 16; ++i)
738     ;
739 }
740
741 void test_loop_messages() {
742   float a[100], b[100], c[100];
743 #pragma omp parallel
744 // expected-error@+2 {{variable must be of integer or pointer type}}
745 #pragma omp parallel for simd
746   for (float fi = 0; fi < 10.0; fi++) {
747     c[(int)fi] = a[(int)fi] + b[(int)fi];
748   }
749 #pragma omp parallel
750 // expected-error@+2 {{variable must be of integer or pointer type}}
751 #pragma omp parallel for simd
752   for (double fi = 0; fi < 10.0; fi++) {
753     c[(int)fi] = a[(int)fi] + b[(int)fi];
754   }
755 }
756