Clang Project

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