blob: 5fc2cb64cc62bd913f689ed40cb0f7d2997bab91 [file] [log] [blame]
Kelvin Li5e00ade2016-07-13 19:16:56 +00001// RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s
2
3// expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute simd'}}
4#pragma omp distribute simd
5
6// expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute simd'}}
7#pragma omp distribute simd foo
8
9// expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute simd'}}
10#pragma omp distribute simd safelen(4)
11
12void test_no_clause() {
13 int i;
14#pragma omp target
15#pragma omp teams
16#pragma omp distribute simd
17 for (i = 0; i < 16; ++i)
18 ;
19
20#pragma omp target
21#pragma omp teams
22// expected-error@+2 {{statement after '#pragma omp distribute simd' must be a for loop}}
23#pragma omp distribute simd
24 ++i;
25}
26
27void test_branch_protected_scope() {
28 int i = 0;
29L1:
30 ++i;
31
32 int x[24];
33
34#pragma omp target
35#pragma omp teams
36#pragma omp distribute simd
37 for (i = 0; i < 16; ++i) {
38 if (i == 5)
39 goto L1; // expected-error {{use of undeclared label 'L1'}}
40 else if (i == 6)
41 return; // expected-error {{cannot return from OpenMP region}}
42 else if (i == 7)
43 goto L2;
44 else if (i == 8) {
45 L2:
46 x[i]++;
47 }
48 }
49
50 if (x[0] == 0)
51 goto L2; // expected-error {{use of undeclared label 'L2'}}
52 else if (x[1] == 1)
53 goto L1;
54}
55
56void test_invalid_clause() {
57 int i;
58#pragma omp target
59#pragma omp teams
60// expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
61#pragma omp distribute simd foo bar
62 for (i = 0; i < 16; ++i)
63 ;
64}
65
66void test_non_identifiers() {
67 int i, x;
68
69#pragma omp target
70#pragma omp teams
71// expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
72#pragma omp distribute simd;
73 for (i = 0; i < 16; ++i)
74 ;
75
76#pragma omp target
77#pragma omp teams
78// expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
79#pragma omp distribute simd private(x);
80 for (i = 0; i < 16; ++i)
81 ;
82
83#pragma omp target
84#pragma omp teams
85// expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
86#pragma omp distribute simd, private(x);
87 for (i = 0; i < 16; ++i)
88 ;
89}
90
91extern int foo();
92void test_safelen() {
93 int i;
94#pragma omp target
95#pragma omp teams
96// expected-error@+1 {{expected '('}}
97#pragma omp distribute simd safelen
98 for (i = 0; i < 16; ++i)
99 ;
100#pragma omp target
101#pragma omp teams
102// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
103#pragma omp distribute simd safelen(
104 for (i = 0; i < 16; ++i)
105 ;
106#pragma omp target
107#pragma omp teams
108// expected-error@+1 {{expected expression}}
109#pragma omp distribute simd safelen()
110 for (i = 0; i < 16; ++i)
111 ;
112#pragma omp target
113#pragma omp teams
114// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
115#pragma omp distribute simd safelen(,
116 for (i = 0; i < 16; ++i)
117 ;
118#pragma omp target
119#pragma omp teams
120// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
121#pragma omp distribute simd safelen(, )
122 for (i = 0; i < 16; ++i)
123 ;
124#pragma omp target
125#pragma omp teams
126// expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
127// expected-error@+1 {{expected '('}}
128#pragma omp distribute simd safelen 4)
129 for (i = 0; i < 16; ++i)
130 ;
131#pragma omp target
132#pragma omp teams
133// expected-error@+2 {{expected ')'}}
134// expected-note@+1 {{to match this '('}}
135#pragma omp distribute simd safelen(4
136 for (i = 0; i < 16; ++i)
137 ;
138#pragma omp target
139#pragma omp teams
140// expected-error@+2 {{expected ')'}}
141// expected-note@+1 {{to match this '('}}
142#pragma omp distribute simd safelen(4,
143 for (i = 0; i < 16; ++i)
144 ;
145#pragma omp target
146#pragma omp teams
147// expected-error@+2 {{expected ')'}}
148// expected-note@+1 {{to match this '('}}
149#pragma omp distribute simd safelen(4, )
150 for (i = 0; i < 16; ++i)
151 ;
152#pragma omp target
153#pragma omp teams
154// xxpected-error@+1 {{expected expression}}
155#pragma omp distribute 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 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 simd safelen(4, , 4)
170 for (i = 0; i < 16; ++i)
171 ;
172#pragma omp target
173#pragma omp teams
174#pragma omp distribute 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 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 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 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 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 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 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 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 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 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 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 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 simd' are ignored}}
251// expected-error@+1 {{expected '('}}
252#pragma omp distribute 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 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 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 simd simdlen(4, )
274 for (i = 0; i < 16; ++i)
275 ;
276#pragma omp target
277#pragma omp teams
278#pragma omp distribute 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 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 simd simdlen(4, , 4)
293 for (i = 0; i < 16; ++i)
294 ;
295#pragma omp target
296#pragma omp teams
297#pragma omp distribute 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 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 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 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 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 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 simd simdlen(5 - 5)
335 for (i = 0; i < 16; ++i)
336 ;
337}
338
Kelvin Lic5609492016-07-15 04:39:07 +0000339void 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 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 simd safelen(5) simdlen(6)
352 for (i = 0; i < 16; ++i)
353 ;
354}
355
Kelvin Li5e00ade2016-07-13 19:16:56 +0000356void test_collapse() {
357 int i;
358#pragma omp target
359#pragma omp teams
360// expected-error@+1 {{expected '('}}
361#pragma omp distribute 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 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 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 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 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 simd' are ignored}}
391// expected-error@+1 {{expected '('}}
392#pragma omp distribute 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 simd collapse(4
400 for (i = 0; i < 16; ++i)
401 ; // expected-error {{expected 4 for loops after '#pragma omp distribute 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 simd collapse(4,
407 for (i = 0; i < 16; ++i)
408 ; // expected-error {{expected 4 for loops after '#pragma omp distribute 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 simd collapse(4, )
414 for (i = 0; i < 16; ++i)
415 ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
416#pragma omp target
417#pragma omp teams
418// xxpected-error@+1 {{expected expression}} expected-note@+1 {{as specified in 'collapse' clause}}
419#pragma omp distribute simd collapse(4)
420 for (i = 0; i < 16; ++i)
421 ; // expected-error {{expected 4 for loops after '#pragma omp distribute 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 simd collapse(4 4)
427 for (i = 0; i < 16; ++i)
428 ; // expected-error {{expected 4 for loops after '#pragma omp distribute 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 simd collapse(4, , 4)
434 for (i = 0; i < 16; ++i)
435 ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
436#pragma omp target
437#pragma omp teams
438#pragma omp distribute 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 simd collapse(4, 8)
449 for (i = 0; i < 16; ++i)
450 ; // expected-error {{expected 4 for loops after '#pragma omp distribute 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 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 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 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 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 simd collapse(5 - 5)
479 for (i = 0; i < 16; ++i)
480 ;
481// expected-note@+3 {{defined as reduction}}
482#pragma omp target
483#pragma omp teams
484#pragma omp distribute simd collapse(2) reduction(+ : i)
485 for (i = 0; i < 16; ++i)
486 // 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?}}
487 for (int j = 0; j < 16; ++j)
488// expected-error@+2 2 {{reduction variable must be shared}}
489// expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}}
490#pragma omp for reduction(+ : i, j)
491 for (int k = 0; k < 16; ++k)
492 i += j;
493
494#pragma omp target
495#pragma omp teams
496 for (i = 0; i < 16; ++i)
497 for (int j = 0; j < 16; ++j)
498#pragma omp distribute simd reduction(+ : i, j)
499 for (int k = 0; k < 16; ++k)
500 i += j;
501}
502
503void test_linear() {
504 int i;
505#pragma omp target
506#pragma omp teams
507// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
508#pragma omp distribute simd linear(
509 for (i = 0; i < 16; ++i)
510 ;
511#pragma omp target
512#pragma omp teams
513// expected-error@+2 {{expected expression}}
514// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
515#pragma omp distribute simd linear(,
516 for (i = 0; i < 16; ++i)
517 ;
518#pragma omp target
519#pragma omp teams
520// expected-error@+2 {{expected expression}}
521// expected-error@+1 {{expected expression}}
522#pragma omp distribute simd linear(, )
523 for (i = 0; i < 16; ++i)
524 ;
525#pragma omp target
526#pragma omp teams
527// expected-error@+1 {{expected expression}}
528#pragma omp distribute simd linear()
529 for (i = 0; i < 16; ++i)
530 ;
531#pragma omp target
532#pragma omp teams
533// expected-error@+1 {{expected expression}}
534#pragma omp distribute simd linear(int)
535 for (i = 0; i < 16; ++i)
536 ;
537#pragma omp target
538#pragma omp teams
539// expected-error@+1 {{expected variable name}}
540#pragma omp distribute simd linear(0)
541 for (i = 0; i < 16; ++i)
542 ;
543#pragma omp target
544#pragma omp teams
545// expected-error@+1 {{use of undeclared identifier 'x'}}
546#pragma omp distribute simd linear(x)
547 for (i = 0; i < 16; ++i)
548 ;
549#pragma omp target
550#pragma omp teams
551// expected-error@+2 {{use of undeclared identifier 'x'}}
552// expected-error@+1 {{use of undeclared identifier 'y'}}
553#pragma omp distribute simd linear(x, y)
554 for (i = 0; i < 16; ++i)
555 ;
556#pragma omp target
557#pragma omp teams
558// expected-error@+3 {{use of undeclared identifier 'x'}}
559// expected-error@+2 {{use of undeclared identifier 'y'}}
560// expected-error@+1 {{use of undeclared identifier 'z'}}
561#pragma omp distribute simd linear(x, y, z)
562 for (i = 0; i < 16; ++i)
563 ;
564
565 int x, y;
566#pragma omp target
567#pragma omp teams
568// expected-error@+1 {{expected expression}}
569#pragma omp distribute simd linear(x :)
570 for (i = 0; i < 16; ++i)
571 ;
572#pragma omp target
573#pragma omp teams
574// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
575#pragma omp distribute simd linear(x :, )
576 for (i = 0; i < 16; ++i)
577 ;
578#pragma omp target
579#pragma omp teams
580#pragma omp distribute simd linear(x : 1)
581 for (i = 0; i < 16; ++i)
582 ;
583#pragma omp target
584#pragma omp teams
585#pragma omp distribute simd linear(x : 2 * 2)
586 for (i = 0; i < 16; ++i)
587 ;
588#pragma omp target
589#pragma omp teams
590// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
591#pragma omp distribute simd linear(x : 1, y)
592 for (i = 0; i < 16; ++i)
593 ;
594#pragma omp target
595#pragma omp teams
596// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
597#pragma omp distribute simd linear(x : 1, y, z : 1)
598 for (i = 0; i < 16; ++i)
599 ;
600
601#pragma omp target
602#pragma omp teams
603// expected-note@+2 {{defined as linear}}
604// expected-error@+1 {{linear variable cannot be linear}}
605#pragma omp distribute simd linear(x) linear(x)
606 for (i = 0; i < 16; ++i)
607 ;
608
609#pragma omp target
610#pragma omp teams
611// expected-note@+2 {{defined as private}}
612// expected-error@+1 {{private variable cannot be linear}}
613#pragma omp distribute simd private(x) linear(x)
614 for (i = 0; i < 16; ++i)
615 ;
616
617#pragma omp target
618#pragma omp teams
619// expected-note@+2 {{defined as linear}}
620// expected-error@+1 {{linear variable cannot be private}}
621#pragma omp distribute simd linear(x) private(x)
622 for (i = 0; i < 16; ++i)
623 ;
624
625#pragma omp target
626#pragma omp teams
627// expected-warning@+1 {{zero linear step (x and other variables in clause should probably be const)}}
628#pragma omp distribute simd linear(x, y : 0)
629 for (i = 0; i < 16; ++i)
630 ;
631
632#pragma omp target
633#pragma omp teams
634// expected-note@+2 {{defined as linear}}
635// expected-error@+1 {{linear variable cannot be lastprivate}}
636#pragma omp distribute simd linear(x) lastprivate(x)
637 for (i = 0; i < 16; ++i)
638 ;
639
640#pragma omp target
641#pragma omp teams
642// expected-note@+2 {{defined as lastprivate}}
643// expected-error@+1 {{lastprivate variable cannot be linear}}
644#pragma omp distribute simd lastprivate(x) linear(x)
645 for (i = 0; i < 16; ++i)
646 ;
647}
648
649void test_aligned() {
650 int i;
651#pragma omp target
652#pragma omp teams
653// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
654#pragma omp distribute simd aligned(
655 for (i = 0; i < 16; ++i)
656 ;
657#pragma omp target
658#pragma omp teams
659// expected-error@+2 {{expected expression}}
660// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
661#pragma omp distribute simd aligned(,
662 for (i = 0; i < 16; ++i)
663 ;
664#pragma omp target
665#pragma omp teams
666// expected-error@+2 {{expected expression}}
667// expected-error@+1 {{expected expression}}
668#pragma omp distribute simd aligned(, )
669 for (i = 0; i < 16; ++i)
670 ;
671#pragma omp target
672#pragma omp teams
673// expected-error@+1 {{expected expression}}
674#pragma omp distribute simd aligned()
675 for (i = 0; i < 16; ++i)
676 ;
677#pragma omp target
678#pragma omp teams
679// expected-error@+1 {{expected expression}}
680#pragma omp distribute simd aligned(int)
681 for (i = 0; i < 16; ++i)
682 ;
683#pragma omp target
684#pragma omp teams
685// expected-error@+1 {{expected variable name}}
686#pragma omp distribute simd aligned(0)
687 for (i = 0; i < 16; ++i)
688 ;
689#pragma omp target
690#pragma omp teams
691// expected-error@+1 {{use of undeclared identifier 'x'}}
692#pragma omp distribute simd aligned(x)
693 for (i = 0; i < 16; ++i)
694 ;
695#pragma omp target
696#pragma omp teams
697// expected-error@+2 {{use of undeclared identifier 'x'}}
698// expected-error@+1 {{use of undeclared identifier 'y'}}
699#pragma omp distribute simd aligned(x, y)
700 for (i = 0; i < 16; ++i)
701 ;
702#pragma omp target
703#pragma omp teams
704// expected-error@+3 {{use of undeclared identifier 'x'}}
705// expected-error@+2 {{use of undeclared identifier 'y'}}
706// expected-error@+1 {{use of undeclared identifier 'z'}}
707#pragma omp distribute simd aligned(x, y, z)
708 for (i = 0; i < 16; ++i)
709 ;
710
711 int *x, y, z[25]; // expected-note 4 {{'y' defined here}}
712#pragma omp target
713#pragma omp teams
714#pragma omp distribute simd aligned(x)
715 for (i = 0; i < 16; ++i)
716 ;
717#pragma omp target
718#pragma omp teams
719#pragma omp distribute simd aligned(z)
720 for (i = 0; i < 16; ++i)
721 ;
722#pragma omp target
723#pragma omp teams
724// expected-error@+1 {{expected expression}}
725#pragma omp distribute simd aligned(x :)
726 for (i = 0; i < 16; ++i)
727 ;
728#pragma omp target
729#pragma omp teams
730// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
731#pragma omp distribute simd aligned(x :, )
732 for (i = 0; i < 16; ++i)
733 ;
734#pragma omp target
735#pragma omp teams
736#pragma omp distribute simd aligned(x : 1)
737 for (i = 0; i < 16; ++i)
738 ;
739#pragma omp target
740#pragma omp teams
741#pragma omp distribute simd aligned(x : 2 * 2)
742 for (i = 0; i < 16; ++i)
743 ;
744#pragma omp target
745#pragma omp teams
746// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
747#pragma omp distribute simd aligned(x : 1, y)
748 for (i = 0; i < 16; ++i)
749 ;
750#pragma omp target
751#pragma omp teams
752// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
753#pragma omp distribute simd aligned(x : 1, y, z : 1)
754 for (i = 0; i < 16; ++i)
755 ;
756
757#pragma omp target
758#pragma omp teams
759// expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}
760#pragma omp distribute simd aligned(x, y)
761 for (i = 0; i < 16; ++i)
762 ;
763#pragma omp target
764#pragma omp teams
765// expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}
766#pragma omp distribute simd aligned(x, y, z)
767 for (i = 0; i < 16; ++i)
768 ;
769
770#pragma omp target
771#pragma omp teams
772// expected-note@+2 {{defined as aligned}}
773// expected-error@+1 {{a variable cannot appear in more than one aligned clause}}
774#pragma omp distribute simd aligned(x) aligned(z, x)
775 for (i = 0; i < 16; ++i)
776 ;
777
778#pragma omp target
779#pragma omp teams
780// expected-note@+3 {{defined as aligned}}
781// expected-error@+2 {{a variable cannot appear in more than one aligned clause}}
782// expected-error@+1 2 {{argument of aligned clause should be array or pointer, not 'int'}}
783#pragma omp distribute simd aligned(x, y, z) aligned(y, z)
784 for (i = 0; i < 16; ++i)
785 ;
786}
787
788void test_private() {
789 int i;
790#pragma omp target
791#pragma omp teams
792// expected-error@+2 {{expected expression}}
793// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
794#pragma omp distribute simd private(
795 for (i = 0; i < 16; ++i)
796 ;
797#pragma omp target
798#pragma omp teams
799// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
800// expected-error@+1 2 {{expected expression}}
801#pragma omp distribute simd private(,
802 for (i = 0; i < 16; ++i)
803 ;
804#pragma omp target
805#pragma omp teams
806// expected-error@+1 2 {{expected expression}}
807#pragma omp distribute simd private(, )
808 for (i = 0; i < 16; ++i)
809 ;
810#pragma omp target
811#pragma omp teams
812// expected-error@+1 {{expected expression}}
813#pragma omp distribute simd private()
814 for (i = 0; i < 16; ++i)
815 ;
816#pragma omp target
817#pragma omp teams
818// expected-error@+1 {{expected expression}}
819#pragma omp distribute simd private(int)
820 for (i = 0; i < 16; ++i)
821 ;
822#pragma omp target
823#pragma omp teams
824// expected-error@+1 {{expected variable name}}
825#pragma omp distribute simd private(0)
826 for (i = 0; i < 16; ++i)
827 ;
828
829 int x, y, z;
830#pragma omp target
831#pragma omp teams
832#pragma omp distribute simd private(x)
833 for (i = 0; i < 16; ++i)
834 ;
835#pragma omp target
836#pragma omp teams
837#pragma omp distribute simd private(x, y)
838 for (i = 0; i < 16; ++i)
839 ;
840#pragma omp target
841#pragma omp teams
842#pragma omp distribute simd private(x, y, z)
843 for (i = 0; i < 16; ++i) {
844 x = y * i + z;
845 }
846}
847
848void test_firstprivate() {
849 int i;
850#pragma omp target
851#pragma omp teams
852// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
853// expected-error@+1 {{expected expression}}
854#pragma omp distribute simd firstprivate(
855 for (i = 0; i < 16; ++i)
856 ;
857}
858
859void test_lastprivate() {
860 int i;
861#pragma omp target
862#pragma omp teams
863// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
864// expected-error@+1 {{expected expression}}
865#pragma omp distribute simd lastprivate(
866 for (i = 0; i < 16; ++i)
867 ;
868
869#pragma omp target
870#pragma omp teams
871// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
872// expected-error@+1 2 {{expected expression}}
873#pragma omp distribute simd lastprivate(,
874 for (i = 0; i < 16; ++i)
875 ;
876#pragma omp target
877#pragma omp teams
878// expected-error@+1 2 {{expected expression}}
879#pragma omp distribute simd lastprivate(, )
880 for (i = 0; i < 16; ++i)
881 ;
882#pragma omp target
883#pragma omp teams
884// expected-error@+1 {{expected expression}}
885#pragma omp distribute simd lastprivate()
886 for (i = 0; i < 16; ++i)
887 ;
888#pragma omp target
889#pragma omp teams
890// expected-error@+1 {{expected expression}}
891#pragma omp distribute simd lastprivate(int)
892 for (i = 0; i < 16; ++i)
893 ;
894#pragma omp target
895#pragma omp teams
896// expected-error@+1 {{expected variable name}}
897#pragma omp distribute simd lastprivate(0)
898 for (i = 0; i < 16; ++i)
899 ;
900
901 int x, y, z;
902#pragma omp target
903#pragma omp teams
904#pragma omp distribute simd lastprivate(x)
905 for (i = 0; i < 16; ++i)
906 ;
907#pragma omp target
908#pragma omp teams
909#pragma omp distribute simd lastprivate(x, y)
910 for (i = 0; i < 16; ++i)
911 ;
912#pragma omp target
913#pragma omp teams
914#pragma omp distribute simd lastprivate(x, y, z)
915 for (i = 0; i < 16; ++i)
916 ;
917}
918
919void test_reduction() {
920 int i, x, y;
921#pragma omp target
922#pragma omp teams
923// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
924// expected-error@+2 {{expected identifier}}
925// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
926#pragma omp distribute simd reduction(
927 for (i = 0; i < 16; ++i)
928 ;
929#pragma omp target
930#pragma omp teams
931// expected-error@+2 {{expected identifier}}
932// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
933#pragma omp distribute simd reduction()
934 for (i = 0; i < 16; ++i)
935 ;
936#pragma omp target
937#pragma omp teams
938// expected-error@+2 {{expected expression}}
939// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
940#pragma omp distribute simd reduction(x)
941 for (i = 0; i < 16; ++i)
942 ;
943#pragma omp target
944#pragma omp teams
945// expected-error@+1 {{expected identifier}}
946#pragma omp distribute simd reduction( : x)
947 for (i = 0; i < 16; ++i)
948 ;
949#pragma omp target
950#pragma omp teams
951// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
952// expected-error@+2 {{expected identifier}}
953// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
954#pragma omp distribute simd reduction(,
955 for (i = 0; i < 16; ++i)
956 ;
957#pragma omp target
958#pragma omp teams
959// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
960// expected-error@+2 {{expected expression}}
961// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
962#pragma omp distribute simd reduction(+
963 for (i = 0; i < 16; ++i)
964 ;
965
966#pragma omp target
967#pragma omp teams
968// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
969//
970// expected-error@+1 {{expected expression}}
971#pragma omp distribute simd reduction(+:
972 for (i = 0; i < 16; ++i)
973 ;
974#pragma omp target
975#pragma omp teams
976// expected-error@+1 {{expected expression}}
977#pragma omp distribute simd reduction(+ :)
978 for (i = 0; i < 16; ++i)
979 ;
980#pragma omp target
981#pragma omp teams
982// expected-error@+1 {{expected expression}}
983#pragma omp distribute simd reduction(+ :, y)
984 for (i = 0; i < 16; ++i)
985 ;
986#pragma omp target
987#pragma omp teams
988// expected-error@+1 {{expected expression}}
989#pragma omp distribute simd reduction(+ : x, + : y)
990 for (i = 0; i < 16; ++i)
991 ;
992#pragma omp target
993#pragma omp teams
994// expected-error@+1 {{expected identifier}}
995#pragma omp distribute simd reduction(% : x)
996 for (i = 0; i < 16; ++i)
997 ;
998
999#pragma omp target
1000#pragma omp teams
1001#pragma omp distribute simd reduction(+ : x)
1002 for (i = 0; i < 16; ++i)
1003 ;
1004#pragma omp target
1005#pragma omp teams
1006#pragma omp distribute simd reduction(* : x)
1007 for (i = 0; i < 16; ++i)
1008 ;
1009#pragma omp target
1010#pragma omp teams
1011#pragma omp distribute simd reduction(- : x)
1012 for (i = 0; i < 16; ++i)
1013 ;
1014#pragma omp target
1015#pragma omp teams
1016#pragma omp distribute simd reduction(& : x)
1017 for (i = 0; i < 16; ++i)
1018 ;
1019#pragma omp target
1020#pragma omp teams
1021#pragma omp distribute simd reduction(| : x)
1022 for (i = 0; i < 16; ++i)
1023 ;
1024#pragma omp target
1025#pragma omp teams
1026#pragma omp distribute simd reduction(^ : x)
1027 for (i = 0; i < 16; ++i)
1028 ;
1029#pragma omp target
1030#pragma omp teams
1031#pragma omp distribute simd reduction(&& : x)
1032 for (i = 0; i < 16; ++i)
1033 ;
1034#pragma omp target
1035#pragma omp teams
1036#pragma omp distribute simd reduction(|| : x)
1037 for (i = 0; i < 16; ++i)
1038 ;
1039#pragma omp target
1040#pragma omp teams
1041#pragma omp distribute simd reduction(max : x)
1042 for (i = 0; i < 16; ++i)
1043 ;
1044#pragma omp target
1045#pragma omp teams
1046#pragma omp distribute simd reduction(min : x)
1047 for (i = 0; i < 16; ++i)
1048 ;
1049 struct X {
1050 int x;
1051 };
1052 struct X X;
1053#pragma omp target
1054#pragma omp teams
1055// expected-error@+1 {{expected variable name}}
1056#pragma omp distribute simd reduction(+ : X.x)
1057 for (i = 0; i < 16; ++i)
1058 ;
1059#pragma omp target
1060#pragma omp teams
1061// expected-error@+1 {{expected variable name}}
1062#pragma omp distribute simd reduction(+ : x + x)
1063 for (i = 0; i < 16; ++i)
1064 ;
1065}
1066
1067void test_loop_messages() {
1068 float a[100], b[100], c[100];
1069#pragma omp target
1070#pragma omp teams
1071// expected-error@+2 {{variable must be of integer or pointer type}}
1072#pragma omp distribute simd
1073 for (float fi = 0; fi < 10.0; fi++) {
1074 c[(int)fi] = a[(int)fi] + b[(int)fi];
1075 }
1076#pragma omp target
1077#pragma omp teams
1078// expected-error@+2 {{variable must be of integer or pointer type}}
1079#pragma omp distribute simd
1080 for (double fi = 0; fi < 10.0; fi++) {
1081 c[(int)fi] = a[(int)fi] + b[(int)fi];
1082 }
1083}
1084
1085void linear_modifiers(int argc) {
1086 int f;
1087#pragma omp target
1088#pragma omp teams
1089#pragma omp distribute simd linear(f)
1090 for (int k = 0; k < argc; ++k) ++k;
1091#pragma omp target
1092#pragma omp teams
1093#pragma omp distribute simd linear(val(f))
1094 for (int k = 0; k < argc; ++k) ++k;
1095#pragma omp target
1096#pragma omp teams
1097#pragma omp distribute simd linear(uval(f)) // expected-error {{expected 'val' modifier}}
1098 for (int k = 0; k < argc; ++k) ++k;
1099#pragma omp target
1100#pragma omp teams
1101#pragma omp distribute simd linear(ref(f)) // expected-error {{expected 'val' modifier}}
1102 for (int k = 0; k < argc; ++k) ++k;
1103#pragma omp target
1104#pragma omp teams
1105#pragma omp distribute simd linear(foo(f)) // expected-error {{expected 'val' modifier}}
1106 for (int k = 0; k < argc; ++k) ++k;
1107}
1108