Clang Project

clang_source_code/test/OpenMP/target_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 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}
488