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 simd'}} |
6 | #pragma omp simd |
7 | |
8 | // expected-error@+1 {{unexpected OpenMP directive '#pragma omp simd'}} |
9 | #pragma omp simd foo |
10 | |
11 | // expected-error@+1 {{unexpected OpenMP directive '#pragma omp simd'}} |
12 | #pragma omp simd safelen(4) |
13 | |
14 | void test_no_clause() { |
15 | int i; |
16 | #pragma omp simd |
17 | for (i = 0; i < 16; ++i) |
18 | ; |
19 | |
20 | // expected-error@+2 {{statement after '#pragma omp simd' must be a for loop}} |
21 | #pragma omp simd |
22 | ++i; |
23 | } |
24 | |
25 | void test_branch_protected_scope() { |
26 | int i = 0; |
27 | L1: |
28 | ++i; |
29 | |
30 | int x[24]; |
31 | |
32 | #pragma omp simd |
33 | for (i = 0; i < 16; ++i) { |
34 | if (i == 5) |
35 | goto L1; // expected-error {{use of undeclared label 'L1'}} |
36 | else if (i == 6) |
37 | return; // expected-error {{cannot return from OpenMP region}} |
38 | else if (i == 7) |
39 | goto L2; |
40 | else if (i == 8) { |
41 | L2: |
42 | x[i]++; |
43 | } |
44 | } |
45 | |
46 | if (x[0] == 0) |
47 | goto L2; // expected-error {{use of undeclared label 'L2'}} |
48 | else if (x[1] == 1) |
49 | goto L1; |
50 | } |
51 | |
52 | void test_invalid_clause() { |
53 | int i; |
54 | // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}} |
55 | #pragma omp simd foo bar |
56 | for (i = 0; i < 16; ++i) |
57 | ; |
58 | } |
59 | |
60 | void test_non_identifiers() { |
61 | int i, x; |
62 | |
63 | // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}} |
64 | #pragma omp simd; |
65 | for (i = 0; i < 16; ++i) |
66 | ; |
67 | // expected-error@+2 {{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp simd'}} |
68 | // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}} |
69 | #pragma omp simd firstprivate(x); |
70 | for (i = 0; i < 16; ++i) |
71 | ; |
72 | |
73 | // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}} |
74 | #pragma omp simd private(x); |
75 | for (i = 0; i < 16; ++i) |
76 | ; |
77 | |
78 | // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}} |
79 | #pragma omp simd, private(x); |
80 | for (i = 0; i < 16; ++i) |
81 | ; |
82 | } |
83 | |
84 | extern int foo(); |
85 | void test_safelen() { |
86 | int i; |
87 | // expected-error@+1 {{expected '('}} |
88 | #pragma omp simd safelen |
89 | for (i = 0; i < 16; ++i) |
90 | ; |
91 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
92 | #pragma omp simd safelen( |
93 | for (i = 0; i < 16; ++i) |
94 | ; |
95 | // expected-error@+1 {{expected expression}} |
96 | #pragma omp simd safelen() |
97 | for (i = 0; i < 16; ++i) |
98 | ; |
99 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
100 | #pragma omp simd safelen(, |
101 | for (i = 0; i < 16; ++i) |
102 | ; |
103 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
104 | #pragma omp simd safelen(, ) |
105 | for (i = 0; i < 16; ++i) |
106 | ; |
107 | // expected-warning@+2 {{extra tokens at the end of '#pragma omp simd' are ignored}} |
108 | // expected-error@+1 {{expected '('}} |
109 | #pragma omp simd safelen 4) |
110 | for (i = 0; i < 16; ++i) |
111 | ; |
112 | // expected-error@+2 {{expected ')'}} |
113 | // expected-note@+1 {{to match this '('}} |
114 | #pragma omp simd safelen(4 |
115 | for (i = 0; i < 16; ++i) |
116 | ; |
117 | // expected-error@+2 {{expected ')'}} |
118 | // expected-note@+1 {{to match this '('}} |
119 | #pragma omp simd safelen(4, |
120 | for (i = 0; i < 16; ++i) |
121 | ; |
122 | // expected-error@+2 {{expected ')'}} |
123 | // expected-note@+1 {{to match this '('}} |
124 | #pragma omp simd safelen(4, ) |
125 | for (i = 0; i < 16; ++i) |
126 | ; |
127 | // xxpected-error@+1 {{expected expression}} |
128 | #pragma omp simd safelen(4) |
129 | for (i = 0; i < 16; ++i) |
130 | ; |
131 | // expected-error@+2 {{expected ')'}} |
132 | // expected-note@+1 {{to match this '('}} |
133 | #pragma omp simd safelen(4 4) |
134 | for (i = 0; i < 16; ++i) |
135 | ; |
136 | // expected-error@+2 {{expected ')'}} |
137 | // expected-note@+1 {{to match this '('}} |
138 | #pragma omp simd safelen(4, , 4) |
139 | for (i = 0; i < 16; ++i) |
140 | ; |
141 | #pragma omp simd safelen(4) |
142 | for (i = 0; i < 16; ++i) |
143 | ; |
144 | // expected-error@+2 {{expected ')'}} |
145 | // expected-note@+1 {{to match this '('}} |
146 | #pragma omp simd safelen(4, 8) |
147 | for (i = 0; i < 16; ++i) |
148 | ; |
149 | // expected-error@+1 {{expression is not an integer constant expression}} |
150 | #pragma omp simd safelen(2.5) |
151 | for (i = 0; i < 16; ++i) |
152 | ; |
153 | // expected-error@+1 {{expression is not an integer constant expression}} |
154 | #pragma omp simd safelen(foo()) |
155 | for (i = 0; i < 16; ++i) |
156 | ; |
157 | // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}} |
158 | #pragma omp simd safelen(-5) |
159 | for (i = 0; i < 16; ++i) |
160 | ; |
161 | // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}} |
162 | #pragma omp simd safelen(0) |
163 | for (i = 0; i < 16; ++i) |
164 | ; |
165 | // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}} |
166 | #pragma omp simd safelen(5 - 5) |
167 | for (i = 0; i < 16; ++i) |
168 | ; |
169 | } |
170 | |
171 | void test_simdlen() { |
172 | int i; |
173 | // expected-error@+1 {{expected '('}} |
174 | #pragma omp simd simdlen |
175 | for (i = 0; i < 16; ++i) |
176 | ; |
177 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
178 | #pragma omp simd simdlen( |
179 | for (i = 0; i < 16; ++i) |
180 | ; |
181 | // expected-error@+1 {{expected expression}} |
182 | #pragma omp simd simdlen() |
183 | for (i = 0; i < 16; ++i) |
184 | ; |
185 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
186 | #pragma omp simd simdlen(, |
187 | for (i = 0; i < 16; ++i) |
188 | ; |
189 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
190 | #pragma omp simd simdlen(, ) |
191 | for (i = 0; i < 16; ++i) |
192 | ; |
193 | // expected-warning@+2 {{extra tokens at the end of '#pragma omp simd' are ignored}} |
194 | // expected-error@+1 {{expected '('}} |
195 | #pragma omp simd simdlen 4) |
196 | for (i = 0; i < 16; ++i) |
197 | ; |
198 | // expected-error@+2 {{expected ')'}} |
199 | // expected-note@+1 {{to match this '('}} |
200 | #pragma omp simd simdlen(4 |
201 | for (i = 0; i < 16; ++i) |
202 | ; |
203 | // expected-error@+2 {{expected ')'}} |
204 | // expected-note@+1 {{to match this '('}} |
205 | #pragma omp simd simdlen(4, |
206 | for (i = 0; i < 16; ++i) |
207 | ; |
208 | // expected-error@+2 {{expected ')'}} |
209 | // expected-note@+1 {{to match this '('}} |
210 | #pragma omp simd simdlen(4, ) |
211 | for (i = 0; i < 16; ++i) |
212 | ; |
213 | #pragma omp simd simdlen(4) |
214 | for (i = 0; i < 16; ++i) |
215 | ; |
216 | // expected-error@+2 {{expected ')'}} |
217 | // expected-note@+1 {{to match this '('}} |
218 | #pragma omp simd simdlen(4 4) |
219 | for (i = 0; i < 16; ++i) |
220 | ; |
221 | // expected-error@+2 {{expected ')'}} |
222 | // expected-note@+1 {{to match this '('}} |
223 | #pragma omp simd simdlen(4, , 4) |
224 | for (i = 0; i < 16; ++i) |
225 | ; |
226 | #pragma omp simd simdlen(4) |
227 | for (i = 0; i < 16; ++i) |
228 | ; |
229 | // expected-error@+2 {{expected ')'}} |
230 | // expected-note@+1 {{to match this '('}} |
231 | #pragma omp simd simdlen(4, 8) |
232 | for (i = 0; i < 16; ++i) |
233 | ; |
234 | // expected-error@+1 {{expression is not an integer constant expression}} |
235 | #pragma omp simd simdlen(2.5) |
236 | for (i = 0; i < 16; ++i) |
237 | ; |
238 | // expected-error@+1 {{expression is not an integer constant expression}} |
239 | #pragma omp simd simdlen(foo()) |
240 | for (i = 0; i < 16; ++i) |
241 | ; |
242 | // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}} |
243 | #pragma omp simd simdlen(-5) |
244 | for (i = 0; i < 16; ++i) |
245 | ; |
246 | // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}} |
247 | #pragma omp simd simdlen(0) |
248 | for (i = 0; i < 16; ++i) |
249 | ; |
250 | // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}} |
251 | #pragma omp simd simdlen(5 - 5) |
252 | for (i = 0; i < 16; ++i) |
253 | ; |
254 | } |
255 | |
256 | void test_safelen_simdlen() { |
257 | int i; |
258 | // expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}} |
259 | #pragma omp simd simdlen(6) safelen(5) |
260 | for (i = 0; i < 16; ++i) |
261 | ; |
262 | // expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}} |
263 | #pragma omp simd safelen(5) simdlen(6) |
264 | for (i = 0; i < 16; ++i) |
265 | ; |
266 | } |
267 | |
268 | void test_collapse() { |
269 | int i; |
270 | // expected-error@+1 {{expected '('}} |
271 | #pragma omp simd collapse |
272 | for (i = 0; i < 16; ++i) |
273 | ; |
274 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
275 | #pragma omp simd collapse( |
276 | for (i = 0; i < 16; ++i) |
277 | ; |
278 | // expected-error@+1 {{expected expression}} |
279 | #pragma omp simd collapse() |
280 | for (i = 0; i < 16; ++i) |
281 | ; |
282 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
283 | #pragma omp simd collapse(, |
284 | for (i = 0; i < 16; ++i) |
285 | ; |
286 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
287 | #pragma omp simd collapse(, ) |
288 | for (i = 0; i < 16; ++i) |
289 | ; |
290 | // expected-warning@+2 {{extra tokens at the end of '#pragma omp simd' are ignored}} |
291 | // expected-error@+1 {{expected '('}} |
292 | #pragma omp simd collapse 4) |
293 | for (i = 0; i < 16; ++i) |
294 | ; |
295 | // expected-error@+2 {{expected ')'}} |
296 | // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} |
297 | #pragma omp simd collapse(4 |
298 | for (i = 0; i < 16; ++i) |
299 | ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} |
300 | // expected-error@+2 {{expected ')'}} |
301 | // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} |
302 | #pragma omp simd collapse(4, |
303 | for (i = 0; i < 16; ++i) |
304 | ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} |
305 | // expected-error@+2 {{expected ')'}} |
306 | // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} |
307 | #pragma omp simd collapse(4, ) |
308 | for (i = 0; i < 16; ++i) |
309 | ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} |
310 | // xxpected-error@+1 {{expected expression}} expected-note@+1 {{as specified in 'collapse' clause}} |
311 | #pragma omp simd collapse(4) |
312 | for (i = 0; i < 16; ++i) |
313 | ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} |
314 | // expected-error@+2 {{expected ')'}} |
315 | // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} |
316 | #pragma omp simd collapse(4 4) |
317 | for (i = 0; i < 16; ++i) |
318 | ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} |
319 | // expected-error@+2 {{expected ')'}} |
320 | // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} |
321 | #pragma omp simd collapse(4, , 4) |
322 | for (i = 0; i < 16; ++i) |
323 | ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} |
324 | #pragma omp simd collapse(4) |
325 | for (int i1 = 0; i1 < 16; ++i1) |
326 | for (int i2 = 0; i2 < 16; ++i2) |
327 | for (int i3 = 0; i3 < 16; ++i3) |
328 | for (int i4 = 0; i4 < 16; ++i4) |
329 | foo(); |
330 | // expected-error@+2 {{expected ')'}} |
331 | // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} |
332 | #pragma omp simd collapse(4, 8) |
333 | for (i = 0; i < 16; ++i) |
334 | ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} |
335 | // expected-error@+1 {{expression is not an integer constant expression}} |
336 | #pragma omp simd collapse(2.5) |
337 | for (i = 0; i < 16; ++i) |
338 | ; |
339 | // expected-error@+1 {{expression is not an integer constant expression}} |
340 | #pragma omp simd collapse(foo()) |
341 | for (i = 0; i < 16; ++i) |
342 | ; |
343 | // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}} |
344 | #pragma omp simd collapse(-5) |
345 | for (i = 0; i < 16; ++i) |
346 | ; |
347 | // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}} |
348 | #pragma omp simd collapse(0) |
349 | for (i = 0; i < 16; ++i) |
350 | ; |
351 | // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}} |
352 | #pragma omp simd collapse(5 - 5) |
353 | for (i = 0; i < 16; ++i) |
354 | ; |
355 | // expected-note@+2 {{defined as reduction}} |
356 | #pragma omp parallel |
357 | #pragma omp simd collapse(2) reduction(+ : i) |
358 | for (i = 0; i < 16; ++i) |
359 | // expected-note@+1 {{variable with automatic storage duration is predetermined as private; perhaps you forget to enclose 'omp for' directive into a parallel or another task region?}} |
360 | for (int j = 0; j < 16; ++j) |
361 | // expected-error@+2 2 {{reduction variable must be shared}} |
362 | // expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}} |
363 | #pragma omp for reduction(+ : i, j) |
364 | for (int k = 0; k < 16; ++k) |
365 | i += j; |
366 | #pragma omp parallel |
367 | #pragma omp for |
368 | for (i = 0; i < 16; ++i) |
369 | for (int j = 0; j < 16; ++j) |
370 | #pragma omp simd reduction(+ : i, j) |
371 | for (int k = 0; k < 16; ++k) |
372 | i += j; |
373 | } |
374 | |
375 | void test_linear() { |
376 | int i; |
377 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
378 | #pragma omp simd linear( |
379 | for (i = 0; i < 16; ++i) |
380 | ; |
381 | // expected-error@+2 {{expected expression}} |
382 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
383 | #pragma omp simd linear(, |
384 | for (i = 0; i < 16; ++i) |
385 | ; |
386 | // expected-error@+2 {{expected expression}} |
387 | // expected-error@+1 {{expected expression}} |
388 | #pragma omp simd linear(, ) |
389 | for (i = 0; i < 16; ++i) |
390 | ; |
391 | // expected-error@+1 {{expected expression}} |
392 | #pragma omp simd linear() |
393 | for (i = 0; i < 16; ++i) |
394 | ; |
395 | // expected-error@+1 {{expected expression}} |
396 | #pragma omp simd linear(int) |
397 | for (i = 0; i < 16; ++i) |
398 | ; |
399 | // expected-error@+1 {{expected variable name}} |
400 | #pragma omp simd linear(0) |
401 | for (i = 0; i < 16; ++i) |
402 | ; |
403 | // expected-error@+1 {{use of undeclared identifier 'x'}} |
404 | #pragma omp simd linear(x) |
405 | for (i = 0; i < 16; ++i) |
406 | ; |
407 | // expected-error@+2 {{use of undeclared identifier 'x'}} |
408 | // expected-error@+1 {{use of undeclared identifier 'y'}} |
409 | #pragma omp simd linear(x, y) |
410 | for (i = 0; i < 16; ++i) |
411 | ; |
412 | // expected-error@+3 {{use of undeclared identifier 'x'}} |
413 | // expected-error@+2 {{use of undeclared identifier 'y'}} |
414 | // expected-error@+1 {{use of undeclared identifier 'z'}} |
415 | #pragma omp simd linear(x, y, z) |
416 | for (i = 0; i < 16; ++i) |
417 | ; |
418 | |
419 | int x, y; |
420 | // expected-error@+1 {{expected expression}} |
421 | #pragma omp simd linear(x :) |
422 | for (i = 0; i < 16; ++i) |
423 | ; |
424 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
425 | #pragma omp simd linear(x :, ) |
426 | for (i = 0; i < 16; ++i) |
427 | ; |
428 | #pragma omp simd linear(x : 1) |
429 | for (i = 0; i < 16; ++i) |
430 | ; |
431 | #pragma omp simd linear(x : 2 * 2) |
432 | for (i = 0; i < 16; ++i) |
433 | ; |
434 | // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
435 | #pragma omp simd linear(x : 1, y) |
436 | for (i = 0; i < 16; ++i) |
437 | ; |
438 | // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
439 | #pragma omp simd linear(x : 1, y, z : 1) |
440 | for (i = 0; i < 16; ++i) |
441 | ; |
442 | |
443 | // expected-note@+2 {{defined as linear}} |
444 | // expected-error@+1 {{linear variable cannot be linear}} |
445 | #pragma omp simd linear(x) linear(x) |
446 | for (i = 0; i < 16; ++i) |
447 | ; |
448 | |
449 | // expected-note@+2 {{defined as private}} |
450 | // expected-error@+1 {{private variable cannot be linear}} |
451 | #pragma omp simd private(x) linear(x) |
452 | for (i = 0; i < 16; ++i) |
453 | ; |
454 | |
455 | // expected-note@+2 {{defined as linear}} |
456 | // expected-error@+1 {{linear variable cannot be private}} |
457 | #pragma omp simd linear(x) private(x) |
458 | for (i = 0; i < 16; ++i) |
459 | ; |
460 | |
461 | // expected-warning@+1 {{zero linear step (x and other variables in clause should probably be const)}} |
462 | #pragma omp simd linear(x, y : 0) |
463 | for (i = 0; i < 16; ++i) |
464 | ; |
465 | |
466 | // expected-note@+2 {{defined as linear}} |
467 | // expected-error@+1 {{linear variable cannot be lastprivate}} |
468 | #pragma omp simd linear(x) lastprivate(x) |
469 | for (i = 0; i < 16; ++i) |
470 | ; |
471 | |
472 | // expected-note@+2 {{defined as lastprivate}} |
473 | // expected-error@+1 {{lastprivate variable cannot be linear}} |
474 | #pragma omp simd lastprivate(x) linear(x) |
475 | for (i = 0; i < 16; ++i) |
476 | ; |
477 | } |
478 | |
479 | void test_aligned() { |
480 | int i; |
481 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
482 | #pragma omp simd aligned( |
483 | for (i = 0; i < 16; ++i) |
484 | ; |
485 | // expected-error@+2 {{expected expression}} |
486 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
487 | #pragma omp simd aligned(, |
488 | for (i = 0; i < 16; ++i) |
489 | ; |
490 | // expected-error@+2 {{expected expression}} |
491 | // expected-error@+1 {{expected expression}} |
492 | #pragma omp simd aligned(, ) |
493 | for (i = 0; i < 16; ++i) |
494 | ; |
495 | // expected-error@+1 {{expected expression}} |
496 | #pragma omp simd aligned() |
497 | for (i = 0; i < 16; ++i) |
498 | ; |
499 | // expected-error@+1 {{expected expression}} |
500 | #pragma omp simd aligned(int) |
501 | for (i = 0; i < 16; ++i) |
502 | ; |
503 | // expected-error@+1 {{expected variable name}} |
504 | #pragma omp simd aligned(0) |
505 | for (i = 0; i < 16; ++i) |
506 | ; |
507 | // expected-error@+1 {{use of undeclared identifier 'x'}} |
508 | #pragma omp simd aligned(x) |
509 | for (i = 0; i < 16; ++i) |
510 | ; |
511 | // expected-error@+2 {{use of undeclared identifier 'x'}} |
512 | // expected-error@+1 {{use of undeclared identifier 'y'}} |
513 | #pragma omp simd aligned(x, y) |
514 | for (i = 0; i < 16; ++i) |
515 | ; |
516 | // expected-error@+3 {{use of undeclared identifier 'x'}} |
517 | // expected-error@+2 {{use of undeclared identifier 'y'}} |
518 | // expected-error@+1 {{use of undeclared identifier 'z'}} |
519 | #pragma omp simd aligned(x, y, z) |
520 | for (i = 0; i < 16; ++i) |
521 | ; |
522 | |
523 | int *x, y, z[25]; // expected-note 4 {{'y' defined here}} |
524 | #pragma omp simd aligned(x) |
525 | for (i = 0; i < 16; ++i) |
526 | ; |
527 | #pragma omp simd aligned(z) |
528 | for (i = 0; i < 16; ++i) |
529 | ; |
530 | // expected-error@+1 {{expected expression}} |
531 | #pragma omp simd aligned(x :) |
532 | for (i = 0; i < 16; ++i) |
533 | ; |
534 | // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
535 | #pragma omp simd aligned(x :, ) |
536 | for (i = 0; i < 16; ++i) |
537 | ; |
538 | #pragma omp simd aligned(x : 1) |
539 | for (i = 0; i < 16; ++i) |
540 | ; |
541 | #pragma omp simd aligned(x : 2 * 2) |
542 | for (i = 0; i < 16; ++i) |
543 | ; |
544 | // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
545 | #pragma omp simd aligned(x : 1, y) |
546 | for (i = 0; i < 16; ++i) |
547 | ; |
548 | // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
549 | #pragma omp simd aligned(x : 1, y, z : 1) |
550 | for (i = 0; i < 16; ++i) |
551 | ; |
552 | |
553 | // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}} |
554 | #pragma omp simd aligned(x, y) |
555 | for (i = 0; i < 16; ++i) |
556 | ; |
557 | // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}} |
558 | #pragma omp simd aligned(x, y, z) |
559 | for (i = 0; i < 16; ++i) |
560 | ; |
561 | |
562 | // expected-note@+2 {{defined as aligned}} |
563 | // expected-error@+1 {{a variable cannot appear in more than one aligned clause}} |
564 | #pragma omp simd aligned(x) aligned(z, x) |
565 | for (i = 0; i < 16; ++i) |
566 | ; |
567 | |
568 | // expected-note@+3 {{defined as aligned}} |
569 | // expected-error@+2 {{a variable cannot appear in more than one aligned clause}} |
570 | // expected-error@+1 2 {{argument of aligned clause should be array or pointer, not 'int'}} |
571 | #pragma omp simd aligned(x, y, z) aligned(y, z) |
572 | for (i = 0; i < 16; ++i) |
573 | ; |
574 | } |
575 | |
576 | void test_private() { |
577 | int i; |
578 | // expected-error@+2 {{expected expression}} |
579 | // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} |
580 | #pragma omp simd private( |
581 | for (i = 0; i < 16; ++i) |
582 | ; |
583 | // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} |
584 | // expected-error@+1 2 {{expected expression}} |
585 | #pragma omp simd private(, |
586 | for (i = 0; i < 16; ++i) |
587 | ; |
588 | // expected-error@+1 2 {{expected expression}} |
589 | #pragma omp simd private(, ) |
590 | for (i = 0; i < 16; ++i) |
591 | ; |
592 | // expected-error@+1 {{expected expression}} |
593 | #pragma omp simd private() |
594 | for (i = 0; i < 16; ++i) |
595 | ; |
596 | // expected-error@+1 {{expected expression}} |
597 | #pragma omp simd private(int) |
598 | for (i = 0; i < 16; ++i) |
599 | ; |
600 | // expected-error@+1 {{expected variable name}} |
601 | #pragma omp simd private(0) |
602 | for (i = 0; i < 16; ++i) |
603 | ; |
604 | |
605 | int x, y, z; |
606 | #pragma omp simd private(x) |
607 | for (i = 0; i < 16; ++i) |
608 | ; |
609 | #pragma omp simd private(x, y) |
610 | for (i = 0; i < 16; ++i) |
611 | ; |
612 | #pragma omp simd private(x, y, z) |
613 | for (i = 0; i < 16; ++i) { |
614 | x = y * i + z; |
615 | } |
616 | } |
617 | |
618 | void test_firstprivate() { |
619 | int i; |
620 | // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} |
621 | // expected-error@+2 {{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp simd'}} |
622 | // expected-error@+1 {{expected expression}} |
623 | #pragma omp simd firstprivate( |
624 | for (i = 0; i < 16; ++i) |
625 | ; |
626 | } |
627 | |
628 | void test_lastprivate() { |
629 | int i; |
630 | // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} |
631 | // expected-error@+1 {{expected expression}} |
632 | #pragma omp simd lastprivate( |
633 | for (i = 0; i < 16; ++i) |
634 | ; |
635 | |
636 | // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} |
637 | // expected-error@+1 2 {{expected expression}} |
638 | #pragma omp simd lastprivate(, |
639 | for (i = 0; i < 16; ++i) |
640 | ; |
641 | // expected-error@+1 2 {{expected expression}} |
642 | #pragma omp simd lastprivate(, ) |
643 | for (i = 0; i < 16; ++i) |
644 | ; |
645 | // expected-error@+1 {{expected expression}} |
646 | #pragma omp simd lastprivate() |
647 | for (i = 0; i < 16; ++i) |
648 | ; |
649 | // expected-error@+1 {{expected expression}} |
650 | #pragma omp simd lastprivate(int) |
651 | for (i = 0; i < 16; ++i) |
652 | ; |
653 | // expected-error@+1 {{expected variable name}} |
654 | #pragma omp simd lastprivate(0) |
655 | for (i = 0; i < 16; ++i) |
656 | ; |
657 | |
658 | int x, y, z; |
659 | #pragma omp simd lastprivate(x) |
660 | for (i = 0; i < 16; ++i) |
661 | ; |
662 | #pragma omp simd lastprivate(x, y) |
663 | for (i = 0; i < 16; ++i) |
664 | ; |
665 | #pragma omp simd lastprivate(x, y, z) |
666 | for (i = 0; i < 16; ++i) |
667 | ; |
668 | } |
669 | |
670 | void test_reduction() { |
671 | int i, x, y; |
672 | // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} |
673 | // expected-error@+2 {{expected identifier}} |
674 | // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}} |
675 | #pragma omp simd reduction( |
676 | for (i = 0; i < 16; ++i) |
677 | ; |
678 | // expected-error@+2 {{expected identifier}} |
679 | // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}} |
680 | #pragma omp simd reduction() |
681 | for (i = 0; i < 16; ++i) |
682 | ; |
683 | // expected-error@+2 {{expected expression}} |
684 | // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}} |
685 | #pragma omp simd reduction(x) |
686 | for (i = 0; i < 16; ++i) |
687 | ; |
688 | // expected-error@+1 {{expected identifier}} |
689 | #pragma omp simd reduction( : x) |
690 | for (i = 0; i < 16; ++i) |
691 | ; |
692 | // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} |
693 | // expected-error@+2 {{expected identifier}} |
694 | // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}} |
695 | #pragma omp simd reduction(, |
696 | for (i = 0; i < 16; ++i) |
697 | ; |
698 | // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} |
699 | // expected-error@+2 {{expected expression}} |
700 | // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}} |
701 | #pragma omp simd reduction(+ |
702 | for (i = 0; i < 16; ++i) |
703 | ; |
704 | |
705 | // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} |
706 | // |
707 | // expected-error@+1 {{expected expression}} |
708 | #pragma omp simd reduction(+: |
709 | for (i = 0; i < 16; ++i) |
710 | ; |
711 | // expected-error@+1 {{expected expression}} |
712 | #pragma omp simd reduction(+ :) |
713 | for (i = 0; i < 16; ++i) |
714 | ; |
715 | // expected-error@+1 {{expected expression}} |
716 | #pragma omp simd reduction(+ :, y) |
717 | for (i = 0; i < 16; ++i) |
718 | ; |
719 | // expected-error@+1 {{expected expression}} |
720 | #pragma omp simd reduction(+ : x, + : y) |
721 | for (i = 0; i < 16; ++i) |
722 | ; |
723 | // expected-error@+1 {{expected identifier}} |
724 | #pragma omp simd reduction(% : x) |
725 | for (i = 0; i < 16; ++i) |
726 | ; |
727 | |
728 | #pragma omp simd reduction(+ : x) |
729 | for (i = 0; i < 16; ++i) |
730 | ; |
731 | #pragma omp simd reduction(* : x) |
732 | for (i = 0; i < 16; ++i) |
733 | ; |
734 | #pragma omp simd reduction(- : x) |
735 | for (i = 0; i < 16; ++i) |
736 | ; |
737 | #pragma omp simd reduction(& : x) |
738 | for (i = 0; i < 16; ++i) |
739 | ; |
740 | #pragma omp simd reduction(| : x) |
741 | for (i = 0; i < 16; ++i) |
742 | ; |
743 | #pragma omp simd reduction(^ : x) |
744 | for (i = 0; i < 16; ++i) |
745 | ; |
746 | #pragma omp simd reduction(&& : x) |
747 | for (i = 0; i < 16; ++i) |
748 | ; |
749 | #pragma omp simd reduction(|| : x) |
750 | for (i = 0; i < 16; ++i) |
751 | ; |
752 | #pragma omp simd reduction(max : x) |
753 | for (i = 0; i < 16; ++i) |
754 | ; |
755 | #pragma omp simd reduction(min : x) |
756 | for (i = 0; i < 16; ++i) |
757 | ; |
758 | struct X { |
759 | int x; |
760 | }; |
761 | struct X X; |
762 | // expected-error@+1 {{expected variable name}} |
763 | #pragma omp simd reduction(+ : X.x) |
764 | for (i = 0; i < 16; ++i) |
765 | ; |
766 | // expected-error@+1 {{expected variable name}} |
767 | #pragma omp simd reduction(+ : x + x) |
768 | for (i = 0; i < 16; ++i) |
769 | ; |
770 | } |
771 | |
772 | void test_loop_messages() { |
773 | float a[100], b[100], c[100]; |
774 | // expected-error@+2 {{variable must be of integer or pointer type}} |
775 | #pragma omp simd |
776 | for (float fi = 0; fi < 10.0; fi++) { |
777 | c[(int)fi] = a[(int)fi] + b[(int)fi]; |
778 | } |
779 | // expected-error@+2 {{variable must be of integer or pointer type}} |
780 | #pragma omp simd |
781 | for (double fi = 0; fi < 10.0; fi++) { |
782 | c[(int)fi] = a[(int)fi] + b[(int)fi]; |
783 | } |
784 | } |
785 | |
786 | void linear_modifiers(int argc) { |
787 | int f; |
788 | #pragma omp simd linear(f) |
789 | for (int k = 0; k < argc; ++k) ++k; |
790 | #pragma omp simd linear(val(f)) |
791 | for (int k = 0; k < argc; ++k) ++k; |
792 | #pragma omp simd linear(uval(f)) // expected-error {{expected 'val' modifier}} |
793 | for (int k = 0; k < argc; ++k) ++k; |
794 | #pragma omp simd linear(ref(f)) // expected-error {{expected 'val' modifier}} |
795 | for (int k = 0; k < argc; ++k) ++k; |
796 | #pragma omp simd linear(foo(f)) // expected-error {{expected 'val' modifier}} |
797 | for (int k = 0; k < argc; ++k) ++k; |
798 | } |
799 | |
800 | |