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