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