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