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