Clang Project

clang_source_code/test/OpenMP/taskloop_misc_messages.c
1// RUN: %clang_cc1 -fsyntax-only -fopenmp -triple x86_64-unknown-unknown -verify %s
2
3// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -triple x86_64-unknown-unknown -verify %s
4
5// expected-error@+1 {{unexpected OpenMP directive '#pragma omp taskloop'}}
6#pragma omp taskloop
7
8// expected-error@+1 {{unexpected OpenMP directive '#pragma omp taskloop'}}
9#pragma omp taskloop foo
10
11void test_no_clause() {
12  int i;
13#pragma omp taskloop
14  for (i = 0; i < 16; ++i)
15    ;
16
17// expected-error@+2 {{statement after '#pragma omp taskloop' must be a for loop}}
18#pragma omp taskloop
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 parallel
30#pragma omp taskloop
31  for (i = 0; i < 16; ++i) {
32    if (i == 5)
33      goto L1; // expected-error {{use of undeclared label 'L1'}}
34    else if (i == 6)
35      return; // expected-error {{cannot return from OpenMP region}}
36    else if (i == 7)
37      goto L2;
38    else if (i == 8) {
39    L2:
40      x[i]++;
41    }
42  }
43
44  if (x[0] == 0)
45    goto L2; // expected-error {{use of undeclared label 'L2'}}
46  else if (x[1] == 1)
47    goto L1;
48}
49
50void test_invalid_clause() {
51  int i;
52#pragma omp parallel
53// expected-warning@+1 {{extra tokens at the end of '#pragma omp taskloop' are ignored}}
54#pragma omp taskloop foo bar
55  for (i = 0; i < 16; ++i)
56    ;
57// expected-error@+1 {{directive '#pragma omp taskloop' cannot contain more than one 'nogroup' clause}}
58#pragma omp taskloop nogroup nogroup
59  for (i = 0; i < 16; ++i)
60    ;
61}
62
63void test_non_identifiers() {
64  int i, x;
65
66#pragma omp parallel
67// expected-warning@+1 {{extra tokens at the end of '#pragma omp taskloop' are ignored}}
68#pragma omp taskloop;
69  for (i = 0; i < 16; ++i)
70    ;
71// expected-warning@+3 {{extra tokens at the end of '#pragma omp taskloop' are ignored}}
72// expected-error@+2 {{unexpected OpenMP clause 'linear' in directive '#pragma omp taskloop'}}
73#pragma omp parallel
74#pragma omp taskloop linear(x);
75  for (i = 0; i < 16; ++i)
76    ;
77
78#pragma omp parallel
79// expected-warning@+1 {{extra tokens at the end of '#pragma omp taskloop' are ignored}}
80#pragma omp taskloop private(x);
81  for (i = 0; i < 16; ++i)
82    ;
83
84#pragma omp parallel
85// expected-warning@+1 {{extra tokens at the end of '#pragma omp taskloop' are ignored}}
86#pragma omp taskloop, private(x);
87  for (i = 0; i < 16; ++i)
88    ;
89}
90
91extern int foo();
92
93void test_collapse() {
94  int i;
95#pragma omp parallel
96// expected-error@+1 {{expected '('}}
97#pragma omp taskloop collapse
98  for (i = 0; i < 16; ++i)
99    ;
100#pragma omp parallel
101// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
102#pragma omp taskloop collapse(
103  for (i = 0; i < 16; ++i)
104    ;
105#pragma omp parallel
106// expected-error@+1 {{expected expression}}
107#pragma omp taskloop collapse()
108  for (i = 0; i < 16; ++i)
109    ;
110#pragma omp parallel
111// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
112#pragma omp taskloop collapse(,
113  for (i = 0; i < 16; ++i)
114    ;
115#pragma omp parallel
116// expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
117#pragma omp taskloop collapse(, )
118  for (i = 0; i < 16; ++i)
119    ;
120#pragma omp parallel
121// expected-warning@+2 {{extra tokens at the end of '#pragma omp taskloop' are ignored}}
122// expected-error@+1 {{expected '('}}
123#pragma omp taskloop collapse 4)
124  for (i = 0; i < 16; ++i)
125    ;
126#pragma omp parallel
127// expected-error@+2 {{expected ')'}}
128// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
129#pragma omp taskloop collapse(4
130  for (i = 0; i < 16; ++i)
131    ; // expected-error {{expected 4 for loops after '#pragma omp taskloop', but found only 1}}
132#pragma omp parallel
133// expected-error@+2 {{expected ')'}}
134// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
135#pragma omp taskloop collapse(4,
136  for (i = 0; i < 16; ++i)
137    ; // expected-error {{expected 4 for loops after '#pragma omp taskloop', but found only 1}}
138#pragma omp parallel
139// expected-error@+2 {{expected ')'}}
140// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
141#pragma omp taskloop collapse(4, )
142  for (i = 0; i < 16; ++i)
143    ; // expected-error {{expected 4 for loops after '#pragma omp taskloop', but found only 1}}
144#pragma omp parallel
145// expected-note@+1 {{as specified in 'collapse' clause}}
146#pragma omp taskloop collapse(4)
147  for (i = 0; i < 16; ++i)
148    ; // expected-error {{expected 4 for loops after '#pragma omp taskloop', but found only 1}}
149#pragma omp parallel
150// expected-error@+2 {{expected ')'}}
151// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
152#pragma omp taskloop collapse(4 4)
153  for (i = 0; i < 16; ++i)
154    ; // expected-error {{expected 4 for loops after '#pragma omp taskloop', but found only 1}}
155#pragma omp parallel
156// expected-error@+2 {{expected ')'}}
157// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
158#pragma omp taskloop collapse(4, , 4)
159  for (i = 0; i < 16; ++i)
160    ; // expected-error {{expected 4 for loops after '#pragma omp taskloop', but found only 1}}
161#pragma omp parallel
162#pragma omp taskloop collapse(4)
163  for (int i1 = 0; i1 < 16; ++i1)
164    for (int i2 = 0; i2 < 16; ++i2)
165      for (int i3 = 0; i3 < 16; ++i3)
166        for (int i4 = 0; i4 < 16; ++i4)
167          foo();
168#pragma omp parallel
169// expected-error@+2 {{expected ')'}}
170// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
171#pragma omp taskloop collapse(4, 8)
172  for (i = 0; i < 16; ++i)
173    ; // expected-error {{expected 4 for loops after '#pragma omp taskloop', but found only 1}}
174#pragma omp parallel
175// expected-error@+1 {{expression is not an integer constant expression}}
176#pragma omp taskloop collapse(2.5)
177  for (i = 0; i < 16; ++i)
178    ;
179#pragma omp parallel
180// expected-error@+1 {{expression is not an integer constant expression}}
181#pragma omp taskloop collapse(foo())
182  for (i = 0; i < 16; ++i)
183    ;
184#pragma omp parallel
185// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
186#pragma omp taskloop collapse(-5)
187  for (i = 0; i < 16; ++i)
188    ;
189#pragma omp parallel
190// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
191#pragma omp taskloop collapse(0)
192  for (i = 0; i < 16; ++i)
193    ;
194#pragma omp parallel
195// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
196#pragma omp taskloop collapse(5 - 5)
197  for (i = 0; i < 16; ++i)
198    ;
199}
200
201void test_private() {
202  int i;
203#pragma omp parallel
204// expected-error@+2 {{expected expression}}
205// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
206#pragma omp taskloop private(
207  for (i = 0; i < 16; ++i)
208    ;
209#pragma omp parallel
210// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
211// expected-error@+1 2 {{expected expression}}
212#pragma omp taskloop private(,
213  for (i = 0; i < 16; ++i)
214    ;
215#pragma omp parallel
216// expected-error@+1 2 {{expected expression}}
217#pragma omp taskloop private(, )
218  for (i = 0; i < 16; ++i)
219    ;
220#pragma omp parallel
221// expected-error@+1 {{expected expression}}
222#pragma omp taskloop private()
223  for (i = 0; i < 16; ++i)
224    ;
225#pragma omp parallel
226// expected-error@+1 {{expected expression}}
227#pragma omp taskloop private(int)
228  for (i = 0; i < 16; ++i)
229    ;
230#pragma omp parallel
231// expected-error@+1 {{expected variable name}}
232#pragma omp taskloop private(0)
233  for (i = 0; i < 16; ++i)
234    ;
235
236  int x, y, z;
237#pragma omp parallel
238#pragma omp taskloop private(x)
239  for (i = 0; i < 16; ++i)
240    ;
241#pragma omp parallel
242#pragma omp taskloop private(x, y)
243  for (i = 0; i < 16; ++i)
244    ;
245#pragma omp parallel
246#pragma omp taskloop private(x, y, z)
247  for (i = 0; i < 16; ++i) {
248    x = y * i + z;
249  }
250}
251
252void test_lastprivate() {
253  int i;
254#pragma omp parallel
255// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
256// expected-error@+1 {{expected expression}}
257#pragma omp taskloop lastprivate(
258  for (i = 0; i < 16; ++i)
259    ;
260
261#pragma omp parallel
262// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
263// expected-error@+1 2 {{expected expression}}
264#pragma omp taskloop lastprivate(,
265  for (i = 0; i < 16; ++i)
266    ;
267#pragma omp parallel
268// expected-error@+1 2 {{expected expression}}
269#pragma omp taskloop lastprivate(, )
270  for (i = 0; i < 16; ++i)
271    ;
272#pragma omp parallel
273// expected-error@+1 {{expected expression}}
274#pragma omp taskloop lastprivate()
275  for (i = 0; i < 16; ++i)
276    ;
277#pragma omp parallel
278// expected-error@+1 {{expected expression}}
279#pragma omp taskloop lastprivate(int)
280  for (i = 0; i < 16; ++i)
281    ;
282#pragma omp parallel
283// expected-error@+1 {{expected variable name}}
284#pragma omp taskloop lastprivate(0)
285  for (i = 0; i < 16; ++i)
286    ;
287
288  int x, y, z;
289#pragma omp parallel
290#pragma omp taskloop lastprivate(x)
291  for (i = 0; i < 16; ++i)
292    ;
293#pragma omp parallel
294#pragma omp taskloop lastprivate(x, y)
295  for (i = 0; i < 16; ++i)
296    ;
297#pragma omp parallel
298#pragma omp taskloop lastprivate(x, y, z)
299  for (i = 0; i < 16; ++i)
300    ;
301}
302
303void test_firstprivate() {
304  int i;
305#pragma omp parallel
306// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
307// expected-error@+1 {{expected expression}}
308#pragma omp taskloop firstprivate(
309  for (i = 0; i < 16; ++i)
310    ;
311
312#pragma omp parallel
313// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
314// expected-error@+1 2 {{expected expression}}
315#pragma omp taskloop firstprivate(,
316  for (i = 0; i < 16; ++i)
317    ;
318#pragma omp parallel
319// expected-error@+1 2 {{expected expression}}
320#pragma omp taskloop firstprivate(, )
321  for (i = 0; i < 16; ++i)
322    ;
323#pragma omp parallel
324// expected-error@+1 {{expected expression}}
325#pragma omp taskloop firstprivate()
326  for (i = 0; i < 16; ++i)
327    ;
328#pragma omp parallel
329// expected-error@+1 {{expected expression}}
330#pragma omp taskloop firstprivate(int)
331  for (i = 0; i < 16; ++i)
332    ;
333#pragma omp parallel
334// expected-error@+1 {{expected variable name}}
335#pragma omp taskloop firstprivate(0)
336  for (i = 0; i < 16; ++i)
337    ;
338
339  int x, y, z;
340#pragma omp parallel
341#pragma omp taskloop lastprivate(x) firstprivate(x)
342  for (i = 0; i < 16; ++i)
343    ;
344#pragma omp parallel
345#pragma omp taskloop lastprivate(x, y) firstprivate(x, y)
346  for (i = 0; i < 16; ++i)
347    ;
348#pragma omp parallel
349#pragma omp taskloop lastprivate(x, y, z) firstprivate(x, y, z)
350  for (i = 0; i < 16; ++i)
351    ;
352}
353
354void test_loop_messages() {
355  float a[100], b[100], c[100];
356#pragma omp parallel
357// expected-error@+2 {{variable must be of integer or pointer type}}
358#pragma omp taskloop
359  for (float fi = 0; fi < 10.0; fi++) {
360    c[(int)fi] = a[(int)fi] + b[(int)fi];
361  }
362#pragma omp parallel
363// expected-error@+2 {{variable must be of integer or pointer type}}
364#pragma omp taskloop
365  for (double fi = 0; fi < 10.0; fi++) {
366    c[(int)fi] = a[(int)fi] + b[(int)fi];
367  }
368
369  // expected-warning@+2 {{OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed}}
370  #pragma omp taskloop
371  for (__int128 ii = 0; ii < 10; ii++) {
372    c[ii] = a[ii] + b[ii];
373  }
374}
375
376