blob: 29c87bb95d1980833a6b6f2e46dd80aeca8fc4ee [file] [log] [blame]
Alexey Bataevdb390212015-05-20 04:24:19 +00001// RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s
Alexey Bataev1b59ab52014-02-27 08:29:12 +00002
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
Alexey Bataevcaf09b02014-07-25 06:27:47 +000012void test_no_clause() {
Alexey Bataev1b59ab52014-02-27 08:29:12 +000013 int i;
Alexey Bataevcaf09b02014-07-25 06:27:47 +000014#pragma omp simd
15 for (i = 0; i < 16; ++i)
16 ;
Alexey Bataev1b59ab52014-02-27 08:29:12 +000017
Alexey Bataevcaf09b02014-07-25 06:27:47 +000018// expected-error@+2 {{statement after '#pragma omp simd' must be a for loop}}
19#pragma omp simd
Alexey Bataev1b59ab52014-02-27 08:29:12 +000020 ++i;
21}
22
Alexey Bataevcaf09b02014-07-25 06:27:47 +000023void test_branch_protected_scope() {
Alexey Bataev1b59ab52014-02-27 08:29:12 +000024 int i = 0;
25L1:
26 ++i;
27
28 int x[24];
29
Alexey Bataevcaf09b02014-07-25 06:27:47 +000030#pragma omp simd
Alexey Bataev1b59ab52014-02-27 08:29:12 +000031 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) {
Alexey Bataevcaf09b02014-07-25 06:27:47 +000039 L2:
Alexey Bataev1b59ab52014-02-27 08:29:12 +000040 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
Alexey Bataevcaf09b02014-07-25 06:27:47 +000050void test_invalid_clause() {
Alexey Bataev1b59ab52014-02-27 08:29:12 +000051 int i;
Alexey Bataevcaf09b02014-07-25 06:27:47 +000052// 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 ;
Alexey Bataev1b59ab52014-02-27 08:29:12 +000056}
57
Alexey Bataevcaf09b02014-07-25 06:27:47 +000058void test_non_identifiers() {
Alexey Bataev1b59ab52014-02-27 08:29:12 +000059 int i, x;
Alexey Bataev2759a7c2014-03-05 07:21:14 +000060
Alexey Bataevcaf09b02014-07-25 06:27:47 +000061// 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 ;
Alexey Bataev2759a7c2014-03-05 07:21:14 +000070
Alexey Bataevcaf09b02014-07-25 06:27:47 +000071// 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 ;
Alexey Bataev2759a7c2014-03-05 07:21:14 +000075
Alexey Bataevcaf09b02014-07-25 06:27:47 +000076// 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 ;
Alexey Bataev1b59ab52014-02-27 08:29:12 +000080}
81
Alexey Bataev62c87d22014-03-21 04:51:18 +000082extern int foo();
Alexey Bataevcaf09b02014-07-25 06:27:47 +000083void test_safelen() {
Alexey Bataev62c87d22014-03-21 04:51:18 +000084 int i;
Alexey Bataevcaf09b02014-07-25 06:27:47 +000085// 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 ;
Alexey Bataeva0569352015-12-01 10:17:31 +0000155// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000156#pragma omp simd safelen(-5)
157 for (i = 0; i < 16; ++i)
158 ;
Alexey Bataeva0569352015-12-01 10:17:31 +0000159// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000160#pragma omp simd safelen(0)
161 for (i = 0; i < 16; ++i)
162 ;
Alexey Bataeva0569352015-12-01 10:17:31 +0000163// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000164#pragma omp simd safelen(5 - 5)
165 for (i = 0; i < 16; ++i)
166 ;
Alexey Bataev62c87d22014-03-21 04:51:18 +0000167}
168
Alexey Bataev66b15b52015-08-21 11:14:16 +0000169void test_simdlen() {
170 int i;
171// expected-error@+1 {{expected '('}}
172#pragma omp simd simdlen
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 simdlen(
177 for (i = 0; i < 16; ++i)
178 ;
179// expected-error@+1 {{expected expression}}
180#pragma omp simd simdlen()
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 simdlen(,
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 simdlen(, )
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 simdlen 4)
194 for (i = 0; i < 16; ++i)
195 ;
196// expected-error@+2 {{expected ')'}}
197// expected-note@+1 {{to match this '('}}
198#pragma omp simd simdlen(4
199 for (i = 0; i < 16; ++i)
200 ;
201// expected-error@+2 {{expected ')'}}
202// expected-note@+1 {{to match this '('}}
203#pragma omp simd simdlen(4,
204 for (i = 0; i < 16; ++i)
205 ;
206// expected-error@+2 {{expected ')'}}
207// expected-note@+1 {{to match this '('}}
208#pragma omp simd simdlen(4, )
209 for (i = 0; i < 16; ++i)
210 ;
211#pragma omp simd simdlen(4)
212 for (i = 0; i < 16; ++i)
213 ;
214// expected-error@+2 {{expected ')'}}
215// expected-note@+1 {{to match this '('}}
216#pragma omp simd simdlen(4 4)
217 for (i = 0; i < 16; ++i)
218 ;
219// expected-error@+2 {{expected ')'}}
220// expected-note@+1 {{to match this '('}}
221#pragma omp simd simdlen(4, , 4)
222 for (i = 0; i < 16; ++i)
223 ;
224#pragma omp simd simdlen(4)
225 for (i = 0; i < 16; ++i)
226 ;
227// expected-error@+2 {{expected ')'}}
228// expected-note@+1 {{to match this '('}}
229#pragma omp simd simdlen(4, 8)
230 for (i = 0; i < 16; ++i)
231 ;
232// expected-error@+1 {{expression is not an integer constant expression}}
233#pragma omp simd simdlen(2.5)
234 for (i = 0; i < 16; ++i)
235 ;
236// expected-error@+1 {{expression is not an integer constant expression}}
237#pragma omp simd simdlen(foo())
238 for (i = 0; i < 16; ++i)
239 ;
Alexey Bataeva0569352015-12-01 10:17:31 +0000240// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
Alexey Bataev66b15b52015-08-21 11:14:16 +0000241#pragma omp simd simdlen(-5)
242 for (i = 0; i < 16; ++i)
243 ;
Alexey Bataeva0569352015-12-01 10:17:31 +0000244// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
Alexey Bataev66b15b52015-08-21 11:14:16 +0000245#pragma omp simd simdlen(0)
246 for (i = 0; i < 16; ++i)
247 ;
Alexey Bataeva0569352015-12-01 10:17:31 +0000248// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
Alexey Bataev66b15b52015-08-21 11:14:16 +0000249#pragma omp simd simdlen(5 - 5)
250 for (i = 0; i < 16; ++i)
251 ;
252}
253
254void test_safelen_simdlen() {
255 int i;
256// expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}
257#pragma omp simd simdlen(6) safelen(5)
258 for (i = 0; i < 16; ++i)
259 ;
260// expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}
261#pragma omp simd safelen(5) simdlen(6)
262 for (i = 0; i < 16; ++i)
263 ;
264}
265
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000266void test_collapse() {
Alexander Musman8bd31e62014-05-27 15:12:19 +0000267 int i;
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000268// expected-error@+1 {{expected '('}}
269#pragma omp simd collapse
270 for (i = 0; i < 16; ++i)
271 ;
272// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
273#pragma omp simd collapse(
274 for (i = 0; i < 16; ++i)
275 ;
276// expected-error@+1 {{expected expression}}
277#pragma omp simd collapse()
278 for (i = 0; i < 16; ++i)
279 ;
280// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
281#pragma omp simd collapse(,
282 for (i = 0; i < 16; ++i)
283 ;
284// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
285#pragma omp simd collapse(, )
286 for (i = 0; i < 16; ++i)
287 ;
288// expected-warning@+2 {{extra tokens at the end of '#pragma omp simd' are ignored}}
289// expected-error@+1 {{expected '('}}
290#pragma omp simd collapse 4)
291 for (i = 0; i < 16; ++i)
292 ;
293// expected-error@+2 {{expected ')'}}
294// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
295#pragma omp simd collapse(4
296 for (i = 0; i < 16; ++i)
297 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}
298// expected-error@+2 {{expected ')'}}
299// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
300#pragma omp simd collapse(4,
301 for (i = 0; i < 16; ++i)
302 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}
303// expected-error@+2 {{expected ')'}}
304// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
305#pragma omp simd collapse(4, )
306 for (i = 0; i < 16; ++i)
307 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}
308// xxpected-error@+1 {{expected expression}} expected-note@+1 {{as specified in 'collapse' clause}}
309#pragma omp simd collapse(4)
310 for (i = 0; i < 16; ++i)
311 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}
312// expected-error@+2 {{expected ')'}}
313// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
314#pragma omp simd collapse(4 4)
315 for (i = 0; i < 16; ++i)
316 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}
317// expected-error@+2 {{expected ')'}}
318// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
319#pragma omp simd collapse(4, , 4)
320 for (i = 0; i < 16; ++i)
321 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}
322#pragma omp simd collapse(4)
Alexander Musman8bd31e62014-05-27 15:12:19 +0000323 for (int i1 = 0; i1 < 16; ++i1)
324 for (int i2 = 0; i2 < 16; ++i2)
325 for (int i3 = 0; i3 < 16; ++i3)
326 for (int i4 = 0; i4 < 16; ++i4)
327 foo();
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000328// expected-error@+2 {{expected ')'}}
329// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
330#pragma omp simd collapse(4, 8)
331 for (i = 0; i < 16; ++i)
332 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}
333// expected-error@+1 {{expression is not an integer constant expression}}
334#pragma omp simd collapse(2.5)
335 for (i = 0; i < 16; ++i)
336 ;
337// expected-error@+1 {{expression is not an integer constant expression}}
338#pragma omp simd collapse(foo())
339 for (i = 0; i < 16; ++i)
340 ;
Alexey Bataeva0569352015-12-01 10:17:31 +0000341// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000342#pragma omp simd collapse(-5)
343 for (i = 0; i < 16; ++i)
344 ;
Alexey Bataeva0569352015-12-01 10:17:31 +0000345// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000346#pragma omp simd collapse(0)
347 for (i = 0; i < 16; ++i)
348 ;
Alexey Bataeva0569352015-12-01 10:17:31 +0000349// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000350#pragma omp simd collapse(5 - 5)
351 for (i = 0; i < 16; ++i)
352 ;
353// expected-note@+2 {{defined as reduction}}
354#pragma omp parallel
355#pragma omp simd collapse(2) reduction(+ : i)
356 for (i = 0; i < 16; ++i)
357 // 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?}}
358 for (int j = 0; j < 16; ++j)
359// expected-error@+3 {{reduction variable must be shared}}
360// expected-error@+2 {{private variable cannot be reduction}}
361// expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}}
362#pragma omp for reduction(+ : i, j)
363 for (int k = 0; k < 16; ++k)
364 i += j;
Alexander Musman8bd31e62014-05-27 15:12:19 +0000365}
366
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000367void test_linear() {
Alexander Musman8dba6642014-04-22 13:09:42 +0000368 int i;
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000369// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
370#pragma omp simd linear(
371 for (i = 0; i < 16; ++i)
372 ;
373// expected-error@+2 {{expected expression}}
374// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
375#pragma omp simd linear(,
376 for (i = 0; i < 16; ++i)
377 ;
378// expected-error@+2 {{expected expression}}
379// expected-error@+1 {{expected expression}}
380#pragma omp simd linear(, )
381 for (i = 0; i < 16; ++i)
382 ;
383// expected-error@+1 {{expected expression}}
384#pragma omp simd linear()
385 for (i = 0; i < 16; ++i)
386 ;
387// expected-error@+1 {{expected expression}}
388#pragma omp simd linear(int)
389 for (i = 0; i < 16; ++i)
390 ;
391// expected-error@+1 {{expected variable name}}
392#pragma omp simd linear(0)
393 for (i = 0; i < 16; ++i)
394 ;
395// expected-error@+1 {{use of undeclared identifier 'x'}}
396#pragma omp simd linear(x)
397 for (i = 0; i < 16; ++i)
398 ;
399// expected-error@+2 {{use of undeclared identifier 'x'}}
400// expected-error@+1 {{use of undeclared identifier 'y'}}
401#pragma omp simd linear(x, y)
402 for (i = 0; i < 16; ++i)
403 ;
404// expected-error@+3 {{use of undeclared identifier 'x'}}
405// expected-error@+2 {{use of undeclared identifier 'y'}}
406// expected-error@+1 {{use of undeclared identifier 'z'}}
407#pragma omp simd linear(x, y, z)
408 for (i = 0; i < 16; ++i)
409 ;
Alexander Musman8dba6642014-04-22 13:09:42 +0000410
411 int x, y;
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000412// expected-error@+1 {{expected expression}}
413#pragma omp simd linear(x :)
414 for (i = 0; i < 16; ++i)
415 ;
416// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
417#pragma omp simd linear(x :, )
418 for (i = 0; i < 16; ++i)
419 ;
420#pragma omp simd linear(x : 1)
421 for (i = 0; i < 16; ++i)
422 ;
423#pragma omp simd linear(x : 2 * 2)
424 for (i = 0; i < 16; ++i)
425 ;
426// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
427#pragma omp simd linear(x : 1, y)
428 for (i = 0; i < 16; ++i)
429 ;
430// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
431#pragma omp simd linear(x : 1, y, z : 1)
432 for (i = 0; i < 16; ++i)
433 ;
Alexander Musman8dba6642014-04-22 13:09:42 +0000434
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000435// expected-note@+2 {{defined as linear}}
436// expected-error@+1 {{linear variable cannot be linear}}
437#pragma omp simd linear(x) linear(x)
438 for (i = 0; i < 16; ++i)
439 ;
Alexander Musman8dba6642014-04-22 13:09:42 +0000440
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000441// expected-note@+2 {{defined as private}}
442// expected-error@+1 {{private variable cannot be linear}}
443#pragma omp simd private(x) linear(x)
444 for (i = 0; i < 16; ++i)
445 ;
Alexander Musman8dba6642014-04-22 13:09:42 +0000446
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000447// expected-note@+2 {{defined as linear}}
448// expected-error@+1 {{linear variable cannot be private}}
449#pragma omp simd linear(x) private(x)
450 for (i = 0; i < 16; ++i)
451 ;
Alexander Musman8dba6642014-04-22 13:09:42 +0000452
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000453// expected-warning@+1 {{zero linear step (x and other variables in clause should probably be const)}}
454#pragma omp simd linear(x, y : 0)
455 for (i = 0; i < 16; ++i)
456 ;
Alexander Musman1bb328c2014-06-04 13:06:39 +0000457
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000458// expected-note@+2 {{defined as linear}}
459// expected-error@+1 {{linear variable cannot be lastprivate}}
460#pragma omp simd linear(x) lastprivate(x)
461 for (i = 0; i < 16; ++i)
462 ;
Alexander Musman1bb328c2014-06-04 13:06:39 +0000463
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000464// expected-note@+2 {{defined as lastprivate}}
465// expected-error@+1 {{lastprivate variable cannot be linear}}
466#pragma omp simd lastprivate(x) linear(x)
467 for (i = 0; i < 16; ++i)
468 ;
Alexander Musman8dba6642014-04-22 13:09:42 +0000469}
470
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000471void test_aligned() {
Alexander Musmanf0d76e72014-05-29 14:36:25 +0000472 int i;
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000473// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
474#pragma omp simd aligned(
475 for (i = 0; i < 16; ++i)
476 ;
477// expected-error@+2 {{expected expression}}
478// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
479#pragma omp simd aligned(,
480 for (i = 0; i < 16; ++i)
481 ;
482// expected-error@+2 {{expected expression}}
483// expected-error@+1 {{expected expression}}
484#pragma omp simd aligned(, )
485 for (i = 0; i < 16; ++i)
486 ;
487// expected-error@+1 {{expected expression}}
488#pragma omp simd aligned()
489 for (i = 0; i < 16; ++i)
490 ;
491// expected-error@+1 {{expected expression}}
492#pragma omp simd aligned(int)
493 for (i = 0; i < 16; ++i)
494 ;
495// expected-error@+1 {{expected variable name}}
496#pragma omp simd aligned(0)
497 for (i = 0; i < 16; ++i)
498 ;
499// expected-error@+1 {{use of undeclared identifier 'x'}}
500#pragma omp simd aligned(x)
501 for (i = 0; i < 16; ++i)
502 ;
503// expected-error@+2 {{use of undeclared identifier 'x'}}
504// expected-error@+1 {{use of undeclared identifier 'y'}}
505#pragma omp simd aligned(x, y)
506 for (i = 0; i < 16; ++i)
507 ;
508// expected-error@+3 {{use of undeclared identifier 'x'}}
509// expected-error@+2 {{use of undeclared identifier 'y'}}
510// expected-error@+1 {{use of undeclared identifier 'z'}}
511#pragma omp simd aligned(x, y, z)
512 for (i = 0; i < 16; ++i)
513 ;
Alexander Musmanf0d76e72014-05-29 14:36:25 +0000514
515 int *x, y, z[25]; // expected-note 4 {{'y' defined here}}
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000516#pragma omp simd aligned(x)
517 for (i = 0; i < 16; ++i)
518 ;
519#pragma omp simd aligned(z)
520 for (i = 0; i < 16; ++i)
521 ;
522// expected-error@+1 {{expected expression}}
523#pragma omp simd aligned(x :)
524 for (i = 0; i < 16; ++i)
525 ;
526// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
527#pragma omp simd aligned(x :, )
528 for (i = 0; i < 16; ++i)
529 ;
530#pragma omp simd aligned(x : 1)
531 for (i = 0; i < 16; ++i)
532 ;
533#pragma omp simd aligned(x : 2 * 2)
534 for (i = 0; i < 16; ++i)
535 ;
536// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
537#pragma omp simd aligned(x : 1, y)
538 for (i = 0; i < 16; ++i)
539 ;
540// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
541#pragma omp simd aligned(x : 1, y, z : 1)
542 for (i = 0; i < 16; ++i)
543 ;
Alexander Musmanf0d76e72014-05-29 14:36:25 +0000544
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000545// expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}
546#pragma omp simd aligned(x, y)
547 for (i = 0; i < 16; ++i)
548 ;
549// expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}
550#pragma omp simd aligned(x, y, z)
551 for (i = 0; i < 16; ++i)
552 ;
Alexander Musmanf0d76e72014-05-29 14:36:25 +0000553
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000554// expected-note@+2 {{defined as aligned}}
555// expected-error@+1 {{a variable cannot appear in more than one aligned clause}}
556#pragma omp simd aligned(x) aligned(z, x)
557 for (i = 0; i < 16; ++i)
558 ;
Alexander Musmanf0d76e72014-05-29 14:36:25 +0000559
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000560// expected-note@+3 {{defined as aligned}}
561// expected-error@+2 {{a variable cannot appear in more than one aligned clause}}
562// expected-error@+1 2 {{argument of aligned clause should be array or pointer, not 'int'}}
563#pragma omp simd aligned(x, y, z) aligned(y, z)
564 for (i = 0; i < 16; ++i)
565 ;
Alexander Musmanf0d76e72014-05-29 14:36:25 +0000566}
567
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000568void test_private() {
Alexey Bataev2759a7c2014-03-05 07:21:14 +0000569 int i;
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000570// expected-error@+2 {{expected expression}}
571// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
572#pragma omp simd private(
573 for (i = 0; i < 16; ++i)
574 ;
575// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
576// expected-error@+1 2 {{expected expression}}
577#pragma omp simd private(,
578 for (i = 0; i < 16; ++i)
579 ;
580// expected-error@+1 2 {{expected expression}}
581#pragma omp simd private(, )
582 for (i = 0; i < 16; ++i)
583 ;
584// expected-error@+1 {{expected expression}}
585#pragma omp simd private()
586 for (i = 0; i < 16; ++i)
587 ;
588// expected-error@+1 {{expected expression}}
589#pragma omp simd private(int)
590 for (i = 0; i < 16; ++i)
591 ;
592// expected-error@+1 {{expected variable name}}
593#pragma omp simd private(0)
594 for (i = 0; i < 16; ++i)
595 ;
Alexey Bataev2759a7c2014-03-05 07:21:14 +0000596
597 int x, y, z;
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000598#pragma omp simd private(x)
599 for (i = 0; i < 16; ++i)
600 ;
601#pragma omp simd private(x, y)
602 for (i = 0; i < 16; ++i)
603 ;
604#pragma omp simd private(x, y, z)
Alexey Bataev2759a7c2014-03-05 07:21:14 +0000605 for (i = 0; i < 16; ++i) {
606 x = y * i + z;
607 }
608}
609
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000610void test_firstprivate() {
Alexey Bataev2759a7c2014-03-05 07:21:14 +0000611 int i;
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000612// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
613// expected-error@+2 {{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp simd'}}
614// expected-error@+1 {{expected expression}}
615#pragma omp simd firstprivate(
616 for (i = 0; i < 16; ++i)
617 ;
Alexey Bataev2759a7c2014-03-05 07:21:14 +0000618}
Alexey Bataev62c87d22014-03-21 04:51:18 +0000619
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000620void test_lastprivate() {
Alexander Musman1bb328c2014-06-04 13:06:39 +0000621 int i;
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000622// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
623// expected-error@+1 {{expected expression}}
624#pragma omp simd lastprivate(
625 for (i = 0; i < 16; ++i)
626 ;
Alexander Musman1bb328c2014-06-04 13:06:39 +0000627
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000628// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
629// expected-error@+1 2 {{expected expression}}
630#pragma omp simd lastprivate(,
631 for (i = 0; i < 16; ++i)
632 ;
633// expected-error@+1 2 {{expected expression}}
634#pragma omp simd lastprivate(, )
635 for (i = 0; i < 16; ++i)
636 ;
637// expected-error@+1 {{expected expression}}
638#pragma omp simd lastprivate()
639 for (i = 0; i < 16; ++i)
640 ;
641// expected-error@+1 {{expected expression}}
642#pragma omp simd lastprivate(int)
643 for (i = 0; i < 16; ++i)
644 ;
645// expected-error@+1 {{expected variable name}}
646#pragma omp simd lastprivate(0)
647 for (i = 0; i < 16; ++i)
648 ;
Alexander Musman1bb328c2014-06-04 13:06:39 +0000649
650 int x, y, z;
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000651#pragma omp simd lastprivate(x)
652 for (i = 0; i < 16; ++i)
653 ;
654#pragma omp simd lastprivate(x, y)
655 for (i = 0; i < 16; ++i)
656 ;
657#pragma omp simd lastprivate(x, y, z)
658 for (i = 0; i < 16; ++i)
659 ;
Alexander Musman1bb328c2014-06-04 13:06:39 +0000660}
661
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000662void test_reduction() {
Alexander Musmanaf89c4e2014-07-08 11:33:21 +0000663 int i, x, y;
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000664// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
665// expected-error@+2 {{expected identifier}}
666// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
667#pragma omp simd reduction(
668 for (i = 0; i < 16; ++i)
669 ;
670// expected-error@+2 {{expected identifier}}
671// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
672#pragma omp simd reduction()
673 for (i = 0; i < 16; ++i)
674 ;
675// expected-error@+2 {{expected expression}}
676// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
677#pragma omp simd reduction(x)
678 for (i = 0; i < 16; ++i)
679 ;
680// expected-error@+1 {{expected identifier}}
681#pragma omp simd reduction( : x)
682 for (i = 0; i < 16; ++i)
683 ;
684// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
685// expected-error@+2 {{expected identifier}}
686// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
687#pragma omp simd reduction(,
688 for (i = 0; i < 16; ++i)
689 ;
690// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
691// expected-error@+2 {{expected expression}}
692// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
693#pragma omp simd reduction(+
694 for (i = 0; i < 16; ++i)
695 ;
Alexander Musmanaf89c4e2014-07-08 11:33:21 +0000696
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000697// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
698//
699// expected-error@+1 {{expected expression}}
700#pragma omp simd reduction(+:
701 for (i = 0; i < 16; ++i)
702 ;
703// expected-error@+1 {{expected expression}}
704#pragma omp simd reduction(+ :)
705 for (i = 0; i < 16; ++i)
706 ;
707// expected-error@+1 {{expected expression}}
708#pragma omp simd reduction(+ :, y)
709 for (i = 0; i < 16; ++i)
710 ;
711// expected-error@+1 {{expected expression}}
712#pragma omp simd reduction(+ : x, + : y)
713 for (i = 0; i < 16; ++i)
714 ;
715// expected-error@+1 {{expected identifier}}
716#pragma omp simd reduction(% : x)
717 for (i = 0; i < 16; ++i)
718 ;
Alexander Musmanaf89c4e2014-07-08 11:33:21 +0000719
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000720#pragma omp simd reduction(+ : x)
721 for (i = 0; i < 16; ++i)
722 ;
723#pragma omp simd reduction(* : x)
724 for (i = 0; i < 16; ++i)
725 ;
726#pragma omp simd reduction(- : x)
727 for (i = 0; i < 16; ++i)
728 ;
729#pragma omp simd reduction(& : x)
730 for (i = 0; i < 16; ++i)
731 ;
732#pragma omp simd reduction(| : x)
733 for (i = 0; i < 16; ++i)
734 ;
735#pragma omp simd reduction(^ : x)
736 for (i = 0; i < 16; ++i)
737 ;
738#pragma omp simd reduction(&& : x)
739 for (i = 0; i < 16; ++i)
740 ;
741#pragma omp simd reduction(|| : x)
742 for (i = 0; i < 16; ++i)
743 ;
744#pragma omp simd reduction(max : x)
745 for (i = 0; i < 16; ++i)
746 ;
747#pragma omp simd reduction(min : x)
748 for (i = 0; i < 16; ++i)
749 ;
750 struct X {
751 int x;
752 };
Alexander Musmanaf89c4e2014-07-08 11:33:21 +0000753 struct X X;
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000754// expected-error@+1 {{expected variable name}}
755#pragma omp simd reduction(+ : X.x)
756 for (i = 0; i < 16; ++i)
757 ;
758// expected-error@+1 {{expected variable name}}
759#pragma omp simd reduction(+ : x + x)
760 for (i = 0; i < 16; ++i)
761 ;
Alexander Musmanaf89c4e2014-07-08 11:33:21 +0000762}
763
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000764void test_loop_messages() {
Alexander Musmana8e9d2e2014-06-03 10:16:47 +0000765 float a[100], b[100], c[100];
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000766// expected-error@+2 {{variable must be of integer or pointer type}}
767#pragma omp simd
Alexander Musmana8e9d2e2014-06-03 10:16:47 +0000768 for (float fi = 0; fi < 10.0; fi++) {
769 c[(int)fi] = a[(int)fi] + b[(int)fi];
770 }
Alexey Bataevcaf09b02014-07-25 06:27:47 +0000771// expected-error@+2 {{variable must be of integer or pointer type}}
772#pragma omp simd
Alexander Musmana8e9d2e2014-06-03 10:16:47 +0000773 for (double fi = 0; fi < 10.0; fi++) {
774 c[(int)fi] = a[(int)fi] + b[(int)fi];
775 }
776}
777
Alexey Bataev182227b2015-08-20 10:54:39 +0000778void linear_modifiers(int argc) {
779 int f;
780 #pragma omp simd linear(f)
781 for (int k = 0; k < argc; ++k) ++k;
782 #pragma omp simd linear(val(f))
783 for (int k = 0; k < argc; ++k) ++k;
784 #pragma omp simd linear(uval(f)) // expected-error {{expected 'val' modifier}}
785 for (int k = 0; k < argc; ++k) ++k;
786 #pragma omp simd linear(ref(f)) // expected-error {{expected 'val' modifier}}
787 for (int k = 0; k < argc; ++k) ++k;
788 #pragma omp simd linear(foo(f)) // expected-error {{expected 'val' modifier}}
789 for (int k = 0; k < argc; ++k) ++k;
790}
791