xref: /llvm-project/clang/test/OpenMP/simd_misc_messages.c (revision 7c34e74c2547da645f0ae542dd95059bc5f8009a)
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