blob: 3965d28af577f1ba5ab19bd3b7d3b7c4c04f4657 [file] [log] [blame]
Kelvin Li986330c2016-07-20 22:57:10 +00001// RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s
2
Alexey Bataeva8a9153a2017-12-29 18:07:07 +00003// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify %s
4
Kelvin Li986330c2016-07-20 22:57:10 +00005// expected-error@+1 {{unexpected OpenMP directive '#pragma omp target simd'}}
6#pragma omp target simd
7
8// expected-error@+1 {{unexpected OpenMP directive '#pragma omp target simd'}}
9#pragma omp target simd foo
10
11void test_no_clause() {
12 int i;
13#pragma omp target simd
14 for (i = 0; i < 16; ++i)
15 ;
16
17// expected-error@+2 {{statement after '#pragma omp target simd' must be a for loop}}
18#pragma omp target 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 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// expected-warning@+1 {{extra tokens at the end of '#pragma omp target simd' are ignored}}
52#pragma omp target simd foo bar
53 for (i = 0; i < 16; ++i)
54 ;
55}
56
57void test_non_identifiers() {
58 int i, x;
59
60// expected-warning@+1 {{extra tokens at the end of '#pragma omp target simd' are ignored}}
61#pragma omp target simd;
62 for (i = 0; i < 16; ++i)
63 ;
64
65// expected-warning@+1 {{extra tokens at the end of '#pragma omp target simd' are ignored}}
66#pragma omp target simd private(x);
67 for (i = 0; i < 16; ++i)
68 ;
69
70// expected-warning@+1 {{extra tokens at the end of '#pragma omp target simd' are ignored}}
71#pragma omp target simd, private(x);
72 for (i = 0; i < 16; ++i)
73 ;
74}
75
76extern int foo();
77
78void test_collapse() {
79 int i;
80// expected-error@+1 {{expected '('}}
81#pragma omp target simd collapse
82 for (i = 0; i < 16; ++i)
83 ;
84// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
85#pragma omp target simd collapse(
86 for (i = 0; i < 16; ++i)
87 ;
88// expected-error@+1 {{expected expression}}
89#pragma omp target simd collapse()
90 for (i = 0; i < 16; ++i)
91 ;
92// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
93#pragma omp target simd collapse(,
94 for (i = 0; i < 16; ++i)
95 ;
96// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
97#pragma omp target simd collapse(, )
98 for (i = 0; i < 16; ++i)
99 ;
100// expected-warning@+2 {{extra tokens at the end of '#pragma omp target simd' are ignored}}
101// expected-error@+1 {{expected '('}}
102#pragma omp target simd collapse 4)
103 for (i = 0; i < 16; ++i)
104 ;
105// expected-error@+2 {{expected ')'}}
106// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
107#pragma omp target simd collapse(4
108 for (i = 0; i < 16; ++i)
109 ; // expected-error {{expected 4 for loops after '#pragma omp target simd', but found only 1}}
110// expected-error@+2 {{expected ')'}}
111// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
112#pragma omp target simd collapse(4,
113 for (i = 0; i < 16; ++i)
114 ; // expected-error {{expected 4 for loops after '#pragma omp target simd', but found only 1}}
115// expected-error@+2 {{expected ')'}}
116// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
117#pragma omp target simd collapse(4, )
118 for (i = 0; i < 16; ++i)
119 ; // expected-error {{expected 4 for loops after '#pragma omp target simd', but found only 1}}
120// expected-note@+1 {{as specified in 'collapse' clause}}
121#pragma omp target simd collapse(4)
122 for (i = 0; i < 16; ++i)
123 ; // expected-error {{expected 4 for loops after '#pragma omp target simd', but found only 1}}
124// expected-error@+2 {{expected ')'}}
125// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
126#pragma omp target simd collapse(4 4)
127 for (i = 0; i < 16; ++i)
128 ; // expected-error {{expected 4 for loops after '#pragma omp target simd', but found only 1}}
129// expected-error@+2 {{expected ')'}}
130// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
131#pragma omp target simd collapse(4, , 4)
132 for (i = 0; i < 16; ++i)
133 ; // expected-error {{expected 4 for loops after '#pragma omp target simd', but found only 1}}
134#pragma omp target simd collapse(4)
135 for (int i1 = 0; i1 < 16; ++i1)
136 for (int i2 = 0; i2 < 16; ++i2)
137 for (int i3 = 0; i3 < 16; ++i3)
138 for (int i4 = 0; i4 < 16; ++i4)
139 foo();
140// expected-error@+2 {{expected ')'}}
141// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
142#pragma omp target simd collapse(4, 8)
143 for (i = 0; i < 16; ++i)
144 ; // expected-error {{expected 4 for loops after '#pragma omp target simd', but found only 1}}
145// expected-error@+1 {{expression is not an integer constant expression}}
146#pragma omp target simd collapse(2.5)
147 for (i = 0; i < 16; ++i)
148 ;
149// expected-error@+1 {{expression is not an integer constant expression}}
150#pragma omp target simd collapse(foo())
151 for (i = 0; i < 16; ++i)
152 ;
153// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
154#pragma omp target simd collapse(-5)
155 for (i = 0; i < 16; ++i)
156 ;
157// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
158#pragma omp target simd collapse(0)
159 for (i = 0; i < 16; ++i)
160 ;
161// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
162#pragma omp target simd collapse(5 - 5)
163 for (i = 0; i < 16; ++i)
164 ;
165}
166
167void test_private() {
168 int i;
169// expected-error@+2 {{expected expression}}
170// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
171#pragma omp target simd private(
172 for (i = 0; i < 16; ++i)
173 ;
174// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
175// expected-error@+1 2 {{expected expression}}
176#pragma omp target simd private(,
177 for (i = 0; i < 16; ++i)
178 ;
179// expected-error@+1 2 {{expected expression}}
180#pragma omp target simd private(, )
181 for (i = 0; i < 16; ++i)
182 ;
183// expected-error@+1 {{expected expression}}
184#pragma omp target simd private()
185 for (i = 0; i < 16; ++i)
186 ;
187// expected-error@+1 {{expected expression}}
188#pragma omp target simd private(int)
189 for (i = 0; i < 16; ++i)
190 ;
191// expected-error@+1 {{expected variable name}}
192#pragma omp target simd private(0)
193 for (i = 0; i < 16; ++i)
194 ;
195
196 int x, y, z;
197#pragma omp target simd private(x)
198 for (i = 0; i < 16; ++i)
199 ;
200#pragma omp target simd private(x, y)
201 for (i = 0; i < 16; ++i)
202 ;
203#pragma omp target simd private(x, y, z)
204 for (i = 0; i < 16; ++i) {
205 x = y * i + z;
206 }
207}
208
209void test_lastprivate() {
210 int i;
211// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
212// expected-error@+1 {{expected expression}}
213#pragma omp target simd lastprivate(
214 for (i = 0; i < 16; ++i)
215 ;
216
217// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
218// expected-error@+1 2 {{expected expression}}
219#pragma omp target simd lastprivate(,
220 for (i = 0; i < 16; ++i)
221 ;
222// expected-error@+1 2 {{expected expression}}
223#pragma omp target simd lastprivate(, )
224 for (i = 0; i < 16; ++i)
225 ;
226// expected-error@+1 {{expected expression}}
227#pragma omp target simd lastprivate()
228 for (i = 0; i < 16; ++i)
229 ;
230// expected-error@+1 {{expected expression}}
231#pragma omp target simd lastprivate(int)
232 for (i = 0; i < 16; ++i)
233 ;
234// expected-error@+1 {{expected variable name}}
235#pragma omp target simd lastprivate(0)
236 for (i = 0; i < 16; ++i)
237 ;
238
239 int x, y, z;
240#pragma omp target simd lastprivate(x)
241 for (i = 0; i < 16; ++i)
242 ;
243#pragma omp target simd lastprivate(x, y)
244 for (i = 0; i < 16; ++i)
245 ;
246#pragma omp target simd lastprivate(x, y, z)
247 for (i = 0; i < 16; ++i)
248 ;
249}
250
251void test_firstprivate() {
252 int i;
253// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
254// expected-error@+1 {{expected expression}}
255#pragma omp target simd firstprivate(
256 for (i = 0; i < 16; ++i)
257 ;
258
259// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
260// expected-error@+1 2 {{expected expression}}
261#pragma omp target simd firstprivate(,
262 for (i = 0; i < 16; ++i)
263 ;
264// expected-error@+1 2 {{expected expression}}
265#pragma omp target simd firstprivate(, )
266 for (i = 0; i < 16; ++i)
267 ;
268// expected-error@+1 {{expected expression}}
269#pragma omp target simd firstprivate()
270 for (i = 0; i < 16; ++i)
271 ;
272// expected-error@+1 {{expected expression}}
273#pragma omp target simd firstprivate(int)
274 for (i = 0; i < 16; ++i)
275 ;
276// expected-error@+1 {{expected variable name}}
277#pragma omp target simd firstprivate(0)
278 for (i = 0; i < 16; ++i)
279 ;
280
281 int x, y, z;
282#pragma omp target simd lastprivate(x) firstprivate(x)
283 for (i = 0; i < 16; ++i)
284 ;
285#pragma omp target simd lastprivate(x, y) firstprivate(x, y)
286 for (i = 0; i < 16; ++i)
287 ;
288#pragma omp target simd lastprivate(x, y, z) firstprivate(x, y, z)
289 for (i = 0; i < 16; ++i)
290 ;
291}
292
293void test_loop_messages() {
294 float a[100], b[100], c[100];
295// expected-error@+2 {{variable must be of integer or pointer type}}
296#pragma omp target simd
297 for (float fi = 0; fi < 10.0; fi++) {
298 c[(int)fi] = a[(int)fi] + b[(int)fi];
299 }
300// expected-error@+2 {{variable must be of integer or pointer type}}
301#pragma omp target simd
302 for (double fi = 0; fi < 10.0; fi++) {
303 c[(int)fi] = a[(int)fi] + b[(int)fi];
304 }
305}
306
307void test_safelen() {
308 int i;
309// expected-error@+1 {{expected '('}}
310#pragma omp target simd safelen
311 for (i = 0; i < 16; ++i)
312 ;
313// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
314#pragma omp target simd safelen(
315 for (i = 0; i < 16; ++i)
316 ;
317// expected-error@+1 {{expected expression}}
318#pragma omp target simd safelen()
319 for (i = 0; i < 16; ++i)
320 ;
321// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
322#pragma omp target simd safelen(,
323 for (i = 0; i < 16; ++i)
324 ;
325// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
326#pragma omp target simd safelen(, )
327 for (i = 0; i < 16; ++i)
328 ;
329// expected-warning@+2 {{extra tokens at the end of '#pragma omp target simd' are ignored}}
330// expected-error@+1 {{expected '('}}
331#pragma omp target simd safelen 4)
332 for (i = 0; i < 16; ++i)
333 ;
334// expected-error@+2 {{expected ')'}}
335// expected-note@+1 {{to match this '('}}
336#pragma omp target simd safelen(4
337 for (i = 0; i < 16; ++i)
338 ;
339// expected-error@+2 {{expected ')'}}
340// expected-note@+1 {{to match this '('}}
341#pragma omp target simd safelen(4,
342 for (i = 0; i < 16; ++i)
343 ;
344// expected-error@+2 {{expected ')'}}
345// expected-note@+1 {{to match this '('}}
346#pragma omp target simd safelen(4, )
347 for (i = 0; i < 16; ++i)
348 ;
349#pragma omp target simd safelen(4)
350 for (i = 0; i < 16; ++i)
351 ;
352// expected-error@+2 {{expected ')'}}
353// expected-note@+1 {{to match this '('}}
354#pragma omp target simd safelen(4 4)
355 for (i = 0; i < 16; ++i)
356 ;
357// expected-error@+2 {{expected ')'}}
358// expected-note@+1 {{to match this '('}}
359#pragma omp target simd safelen(4, , 4)
360 for (i = 0; i < 16; ++i)
361 ;
362#pragma omp target simd safelen(4)
363 for (i = 0; i < 16; ++i)
364 ;
365// expected-error@+2 {{expected ')'}}
366// expected-note@+1 {{to match this '('}}
367#pragma omp target simd safelen(4, 8)
368 for (i = 0; i < 16; ++i)
369 ;
370// expected-error@+1 {{expression is not an integer constant expression}}
371#pragma omp target simd safelen(2.5)
372 for (i = 0; i < 16; ++i)
373 ;
374// expected-error@+1 {{expression is not an integer constant expression}}
375#pragma omp target simd safelen(foo())
376 for (i = 0; i < 16; ++i)
377 ;
378// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
379#pragma omp target simd safelen(-5)
380 for (i = 0; i < 16; ++i)
381 ;
382// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
383#pragma omp target simd safelen(0)
384 for (i = 0; i < 16; ++i)
385 ;
386// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
387#pragma omp target simd safelen(5 - 5)
388 for (i = 0; i < 16; ++i)
389 ;
390}
391
392void test_simdlen() {
393 int i;
394// expected-error@+1 {{expected '('}}
395#pragma omp target simd simdlen
396 for (i = 0; i < 16; ++i)
397 ;
398// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
399#pragma omp target simd simdlen(
400 for (i = 0; i < 16; ++i)
401 ;
402// expected-error@+1 {{expected expression}}
403#pragma omp target simd simdlen()
404 for (i = 0; i < 16; ++i)
405 ;
406// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
407#pragma omp target simd simdlen(,
408 for (i = 0; i < 16; ++i)
409 ;
410// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
411#pragma omp target simd simdlen(, )
412 for (i = 0; i < 16; ++i)
413 ;
414// expected-warning@+2 {{extra tokens at the end of '#pragma omp target simd' are ignored}}
415// expected-error@+1 {{expected '('}}
416#pragma omp target simd simdlen 4)
417 for (i = 0; i < 16; ++i)
418 ;
419// expected-error@+2 {{expected ')'}}
420// expected-note@+1 {{to match this '('}}
421#pragma omp target simd simdlen(4
422 for (i = 0; i < 16; ++i)
423 ;
424// expected-error@+2 {{expected ')'}}
425// expected-note@+1 {{to match this '('}}
426#pragma omp target simd simdlen(4,
427 for (i = 0; i < 16; ++i)
428 ;
429// expected-error@+2 {{expected ')'}}
430// expected-note@+1 {{to match this '('}}
431#pragma omp target simd simdlen(4, )
432 for (i = 0; i < 16; ++i)
433 ;
434#pragma omp target simd simdlen(4)
435 for (i = 0; i < 16; ++i)
436 ;
437// expected-error@+2 {{expected ')'}}
438// expected-note@+1 {{to match this '('}}
439#pragma omp target simd simdlen(4 4)
440 for (i = 0; i < 16; ++i)
441 ;
442// expected-error@+2 {{expected ')'}}
443// expected-note@+1 {{to match this '('}}
444#pragma omp target simd simdlen(4, , 4)
445 for (i = 0; i < 16; ++i)
446 ;
447#pragma omp target simd simdlen(4)
448 for (i = 0; i < 16; ++i)
449 ;
450// expected-error@+2 {{expected ')'}}
451// expected-note@+1 {{to match this '('}}
452#pragma omp target simd simdlen(4, 8)
453 for (i = 0; i < 16; ++i)
454 ;
455// expected-error@+1 {{expression is not an integer constant expression}}
456#pragma omp target simd simdlen(2.5)
457 for (i = 0; i < 16; ++i)
458 ;
459// expected-error@+1 {{expression is not an integer constant expression}}
460#pragma omp target simd simdlen(foo())
461 for (i = 0; i < 16; ++i)
462 ;
463// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
464#pragma omp target simd simdlen(-5)
465 for (i = 0; i < 16; ++i)
466 ;
467// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
468#pragma omp target simd simdlen(0)
469 for (i = 0; i < 16; ++i)
470 ;
471// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
472#pragma omp target simd simdlen(5 - 5)
473 for (i = 0; i < 16; ++i)
474 ;
475}
476
477void test_safelen_simdlen() {
478 int i;
479// expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}
480#pragma omp target simd simdlen(6) safelen(5)
481 for (i = 0; i < 16; ++i)
482 ;
483// expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}
484#pragma omp target simd safelen(5) simdlen(6)
485 for (i = 0; i < 16; ++i)
486 ;
487}