Clang Project

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