blob: f94bb3870ca2afc08422648f4c92a6020414230f [file] [log] [blame]
Stephen Hines651f13c2014-04-23 16:59:28 -07001// 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
Stephen Hines176edba2014-12-01 14:53:08 -080012void test_no_clause() {
Stephen Hines651f13c2014-04-23 16:59:28 -070013 int i;
Stephen Hines176edba2014-12-01 14:53:08 -080014#pragma omp simd
15 for (i = 0; i < 16; ++i)
16 ;
Stephen Hines651f13c2014-04-23 16:59:28 -070017
Stephen Hines176edba2014-12-01 14:53:08 -080018// expected-error@+2 {{statement after '#pragma omp simd' must be a for loop}}
19#pragma omp simd
Stephen Hines651f13c2014-04-23 16:59:28 -070020 ++i;
21}
22
Stephen Hines176edba2014-12-01 14:53:08 -080023void test_branch_protected_scope() {
Stephen Hines651f13c2014-04-23 16:59:28 -070024 int i = 0;
25L1:
26 ++i;
27
28 int x[24];
29
Stephen Hines176edba2014-12-01 14:53:08 -080030#pragma omp simd
Stephen Hines651f13c2014-04-23 16:59:28 -070031 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) {
Stephen Hines176edba2014-12-01 14:53:08 -080039 L2:
Stephen Hines651f13c2014-04-23 16:59:28 -070040 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
Stephen Hines176edba2014-12-01 14:53:08 -080050void test_invalid_clause() {
Stephen Hines651f13c2014-04-23 16:59:28 -070051 int i;
Stephen Hines176edba2014-12-01 14:53:08 -080052// 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 ;
Stephen Hines651f13c2014-04-23 16:59:28 -070056}
57
Stephen Hines176edba2014-12-01 14:53:08 -080058void test_non_identifiers() {
Stephen Hines651f13c2014-04-23 16:59:28 -070059 int i, x;
60
Stephen Hines176edba2014-12-01 14:53:08 -080061// 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 ;
Stephen Hines651f13c2014-04-23 16:59:28 -070070
Stephen Hines176edba2014-12-01 14:53:08 -080071// 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 ;
Stephen Hines651f13c2014-04-23 16:59:28 -070075
Stephen Hines176edba2014-12-01 14:53:08 -080076// 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 ;
Stephen Hines651f13c2014-04-23 16:59:28 -070080}
81
82extern int foo();
Stephen Hines176edba2014-12-01 14:53:08 -080083void test_safelen() {
Stephen Hines651f13c2014-04-23 16:59:28 -070084 int i;
Stephen Hines176edba2014-12-01 14:53:08 -080085// 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 ;
Stephen Hines651f13c2014-04-23 16:59:28 -0700167}
168
Stephen Hines176edba2014-12-01 14:53:08 -0800169void test_collapse() {
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700170 int i;
Stephen Hines176edba2014-12-01 14:53:08 -0800171// 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)
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700226 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();
Stephen Hines176edba2014-12-01 14:53:08 -0800231// 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;
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700268}
269
Stephen Hines176edba2014-12-01 14:53:08 -0800270void test_linear() {
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700271 int i;
Stephen Hines176edba2014-12-01 14:53:08 -0800272// 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 ;
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700313
314 int x, y;
Stephen Hines176edba2014-12-01 14:53:08 -0800315// 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 ;
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700337
Stephen Hines176edba2014-12-01 14:53:08 -0800338// 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 ;
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700343
Stephen Hines176edba2014-12-01 14:53:08 -0800344// 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 ;
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700349
Stephen Hines176edba2014-12-01 14:53:08 -0800350// 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 ;
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700355
Stephen Hines176edba2014-12-01 14:53:08 -0800356// 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 ;
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700360
Stephen Hines176edba2014-12-01 14:53:08 -0800361// 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 ;
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700366
Stephen Hines176edba2014-12-01 14:53:08 -0800367// 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 ;
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700372}
373
Stephen Hines176edba2014-12-01 14:53:08 -0800374void test_aligned() {
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700375 int i;
Stephen Hines176edba2014-12-01 14:53:08 -0800376// 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 ;
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700417
418 int *x, y, z[25]; // expected-note 4 {{'y' defined here}}
Stephen Hines176edba2014-12-01 14:53:08 -0800419#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 ;
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700447
Stephen Hines176edba2014-12-01 14:53:08 -0800448// 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 ;
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700456
Stephen Hines176edba2014-12-01 14:53:08 -0800457// 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 ;
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700462
Stephen Hines176edba2014-12-01 14:53:08 -0800463// 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 ;
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700469}
470
Stephen Hines176edba2014-12-01 14:53:08 -0800471void test_private() {
Stephen Hines651f13c2014-04-23 16:59:28 -0700472 int i;
Stephen Hines176edba2014-12-01 14:53:08 -0800473// 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 ;
Stephen Hines651f13c2014-04-23 16:59:28 -0700499
500 int x, y, z;
Stephen Hines176edba2014-12-01 14:53:08 -0800501#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)
Stephen Hines651f13c2014-04-23 16:59:28 -0700508 for (i = 0; i < 16; ++i) {
509 x = y * i + z;
510 }
511}
512
Stephen Hines176edba2014-12-01 14:53:08 -0800513void test_firstprivate() {
Stephen Hines651f13c2014-04-23 16:59:28 -0700514 int i;
Stephen Hines176edba2014-12-01 14:53:08 -0800515// 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 ;
Stephen Hines651f13c2014-04-23 16:59:28 -0700521}
522
Stephen Hines176edba2014-12-01 14:53:08 -0800523void test_lastprivate() {
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700524 int i;
Stephen Hines176edba2014-12-01 14:53:08 -0800525// 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 ;
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700530
Stephen Hines176edba2014-12-01 14:53:08 -0800531// 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 ;
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700552
553 int x, y, z;
Stephen Hines176edba2014-12-01 14:53:08 -0800554#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 ;
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700563}
564
Stephen Hines176edba2014-12-01 14:53:08 -0800565void test_reduction() {
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700566 int i, x, y;
Stephen Hines176edba2014-12-01 14:53:08 -0800567// 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 ;
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700599
Stephen Hines176edba2014-12-01 14:53:08 -0800600// 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 ;
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700622
Stephen Hines176edba2014-12-01 14:53:08 -0800623#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 };
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700656 struct X X;
Stephen Hines176edba2014-12-01 14:53:08 -0800657// 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 ;
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700665}
666
Stephen Hines176edba2014-12-01 14:53:08 -0800667void test_loop_messages() {
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700668 float a[100], b[100], c[100];
Stephen Hines176edba2014-12-01 14:53:08 -0800669// expected-error@+2 {{variable must be of integer or pointer type}}
670#pragma omp simd
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700671 for (float fi = 0; fi < 10.0; fi++) {
672 c[(int)fi] = a[(int)fi] + b[(int)fi];
673 }
Stephen Hines176edba2014-12-01 14:53:08 -0800674// expected-error@+2 {{variable must be of integer or pointer type}}
675#pragma omp simd
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700676 for (double fi = 0; fi < 10.0; fi++) {
677 c[(int)fi] = a[(int)fi] + b[(int)fi];
678 }
679}
680