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