blob: 9b3f290d0e72f356123618763ff51c9103551c6c [file] [log] [blame]
Alexey Bataevf29276e2014-06-18 04:14:57 +00001// RUN: %clang_cc1 -fsyntax-only -fopenmp=libiomp5 -verify %s
2
3// expected-error@+1 {{unexpected OpenMP directive '#pragma omp for'}}
4#pragma omp for
5
6// expected-error@+1 {{unexpected OpenMP directive '#pragma omp for'}}
7#pragma omp for foo
8
9void test_no_clause() {
10 int i;
11#pragma omp for
12 for (i = 0; i < 16; ++i)
13 ;
14
15// expected-error@+2 {{statement after '#pragma omp for' must be a for loop}}
16#pragma omp for
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 for
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 for' are ignored}}
52#pragma omp for 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 for' are ignored}}
62#pragma omp for;
63 for (i = 0; i < 16; ++i)
64 ;
65#pragma omp parallel
66// expected-error@+2 {{unexpected OpenMP clause 'linear' in directive '#pragma omp for'}}
67// expected-warning@+1 {{extra tokens at the end of '#pragma omp for' are ignored}}
68#pragma omp for linear(x);
69 for (i = 0; i < 16; ++i)
70 ;
71
72#pragma omp parallel
73// expected-warning@+1 {{extra tokens at the end of '#pragma omp for' are ignored}}
74#pragma omp for private(x);
75 for (i = 0; i < 16; ++i)
76 ;
77
78#pragma omp parallel
79// expected-warning@+1 {{extra tokens at the end of '#pragma omp for' are ignored}}
80#pragma omp for, private(x);
81 for (i = 0; i < 16; ++i)
82 ;
83}
84
85extern int foo();
86
87void test_collapse() {
88 int i;
89#pragma omp parallel
90// expected-error@+1 {{expected '('}}
91#pragma omp for collapse
92 for (i = 0; i < 16; ++i)
93 ;
94#pragma omp parallel
95// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
96#pragma omp for collapse(
97 for (i = 0; i < 16; ++i)
98 ;
99#pragma omp parallel
100// expected-error@+1 {{expected expression}}
101#pragma omp for collapse()
102 for (i = 0; i < 16; ++i)
103 ;
104#pragma omp parallel
105// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
106#pragma omp for collapse(,
107 for (i = 0; i < 16; ++i)
108 ;
109#pragma omp parallel
110// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
111#pragma omp for collapse(, )
112 for (i = 0; i < 16; ++i)
113 ;
114#pragma omp parallel
115// expected-warning@+2 {{extra tokens at the end of '#pragma omp for' are ignored}}
116// expected-error@+1 {{expected '('}}
117#pragma omp for collapse 4)
118 for (i = 0; i < 16; ++i)
119 ;
120#pragma omp parallel
121// expected-error@+2 {{expected ')'}}
122// expected-note@+1 {{to match this '('}}
123#pragma omp for collapse(4
124 for (i = 0; i < 16; ++i)
125 ;
126#pragma omp parallel
127// expected-error@+2 {{expected ')'}}
128// expected-note@+1 {{to match this '('}}
129#pragma omp for collapse(4,
130 for (i = 0; i < 16; ++i)
131 ;
132#pragma omp parallel
133// expected-error@+2 {{expected ')'}}
134// expected-note@+1 {{to match this '('}}
135#pragma omp for collapse(4, )
136 for (i = 0; i < 16; ++i)
137 ;
138#pragma omp parallel
139#pragma omp for collapse(4)
140 for (i = 0; i < 16; ++i)
141 ;
142#pragma omp parallel
143// expected-error@+2 {{expected ')'}}
144// expected-note@+1 {{to match this '('}}
145#pragma omp for collapse(4 4)
146 for (i = 0; i < 16; ++i)
147 ;
148#pragma omp parallel
149// expected-error@+2 {{expected ')'}}
150// expected-note@+1 {{to match this '('}}
151#pragma omp for collapse(4, , 4)
152 for (i = 0; i < 16; ++i)
153 ;
154#pragma omp parallel
155#pragma omp for collapse(4)
156 for (int i1 = 0; i1 < 16; ++i1)
157 for (int i2 = 0; i2 < 16; ++i2)
158 for (int i3 = 0; i3 < 16; ++i3)
159 for (int i4 = 0; i4 < 16; ++i4)
160 foo();
161#pragma omp parallel
162// expected-error@+2 {{expected ')'}}
163// expected-note@+1 {{to match this '('}}
164#pragma omp for collapse(4, 8)
165 for (i = 0; i < 16; ++i)
166 ;
167#pragma omp parallel
168// expected-error@+1 {{expression is not an integer constant expression}}
169#pragma omp for collapse(2.5)
170 for (i = 0; i < 16; ++i)
171 ;
172#pragma omp parallel
173// expected-error@+1 {{expression is not an integer constant expression}}
174#pragma omp for collapse(foo())
175 for (i = 0; i < 16; ++i)
176 ;
177#pragma omp parallel
178// expected-error@+1 {{argument to 'collapse' clause must be a positive integer value}}
179#pragma omp for collapse(-5)
180 for (i = 0; i < 16; ++i)
181 ;
182#pragma omp parallel
183// expected-error@+1 {{argument to 'collapse' clause must be a positive integer value}}
184#pragma omp for collapse(0)
185 for (i = 0; i < 16; ++i)
186 ;
187#pragma omp parallel
188// expected-error@+1 {{argument to 'collapse' clause must be a positive integer value}}
189#pragma omp for collapse(5 - 5)
190 for (i = 0; i < 16; ++i)
191 ;
192}
193
194void test_private() {
195 int i;
196#pragma omp parallel
197// expected-error@+2 {{expected expression}}
198// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
199#pragma omp for private(
200 for (i = 0; i < 16; ++i)
201 ;
202#pragma omp parallel
203// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
204// expected-error@+1 2 {{expected expression}}
205#pragma omp for private(,
206 for (i = 0; i < 16; ++i)
207 ;
208#pragma omp parallel
209// expected-error@+1 2 {{expected expression}}
210#pragma omp for private(, )
211 for (i = 0; i < 16; ++i)
212 ;
213#pragma omp parallel
214// expected-error@+1 {{expected expression}}
215#pragma omp for private()
216 for (i = 0; i < 16; ++i)
217 ;
218#pragma omp parallel
219// expected-error@+1 {{expected expression}}
220#pragma omp for private(int)
221 for (i = 0; i < 16; ++i)
222 ;
223#pragma omp parallel
224// expected-error@+1 {{expected variable name}}
225#pragma omp for private(0)
226 for (i = 0; i < 16; ++i)
227 ;
228
229 int x, y, z;
230#pragma omp parallel
231#pragma omp for private(x)
232 for (i = 0; i < 16; ++i)
233 ;
234#pragma omp parallel
235#pragma omp for private(x, y)
236 for (i = 0; i < 16; ++i)
237 ;
238#pragma omp parallel
239#pragma omp for private(x, y, z)
240 for (i = 0; i < 16; ++i) {
241 x = y * i + z;
242 }
243}
244
245void test_lastprivate() {
246 int i;
247#pragma omp parallel
248// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
249// expected-error@+1 {{expected expression}}
250#pragma omp for lastprivate(
251 for (i = 0; i < 16; ++i)
252 ;
253
254#pragma omp parallel
255// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
256// expected-error@+1 2 {{expected expression}}
257#pragma omp for lastprivate(,
258 for (i = 0; i < 16; ++i)
259 ;
260#pragma omp parallel
261// expected-error@+1 2 {{expected expression}}
262#pragma omp for lastprivate(, )
263 for (i = 0; i < 16; ++i)
264 ;
265#pragma omp parallel
266// expected-error@+1 {{expected expression}}
267#pragma omp for lastprivate()
268 for (i = 0; i < 16; ++i)
269 ;
270#pragma omp parallel
271// expected-error@+1 {{expected expression}}
272#pragma omp for lastprivate(int)
273 for (i = 0; i < 16; ++i)
274 ;
275#pragma omp parallel
276// expected-error@+1 {{expected variable name}}
277#pragma omp for lastprivate(0)
278 for (i = 0; i < 16; ++i)
279 ;
280
281 int x, y, z;
282#pragma omp parallel
283#pragma omp for lastprivate(x)
284 for (i = 0; i < 16; ++i)
285 ;
286#pragma omp parallel
287#pragma omp for lastprivate(x, y)
288 for (i = 0; i < 16; ++i)
289 ;
290#pragma omp parallel
291#pragma omp for lastprivate(x, y, z)
292 for (i = 0; i < 16; ++i)
293 ;
294}
295
296void test_firstprivate() {
297 int i;
298#pragma omp parallel
299// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
300// expected-error@+1 {{expected expression}}
301#pragma omp for firstprivate(
302 for (i = 0; i < 16; ++i)
303 ;
304
305#pragma omp parallel
306// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
307// expected-error@+1 2 {{expected expression}}
308#pragma omp for firstprivate(,
309 for (i = 0; i < 16; ++i)
310 ;
311#pragma omp parallel
312// expected-error@+1 2 {{expected expression}}
313#pragma omp for firstprivate(, )
314 for (i = 0; i < 16; ++i)
315 ;
316#pragma omp parallel
317// expected-error@+1 {{expected expression}}
318#pragma omp for firstprivate()
319 for (i = 0; i < 16; ++i)
320 ;
321#pragma omp parallel
322// expected-error@+1 {{expected expression}}
323#pragma omp for firstprivate(int)
324 for (i = 0; i < 16; ++i)
325 ;
326#pragma omp parallel
327// expected-error@+1 {{expected variable name}}
328#pragma omp for firstprivate(0)
329 for (i = 0; i < 16; ++i)
330 ;
331
332 int x, y, z;
333#pragma omp parallel
334#pragma omp for lastprivate(x) firstprivate(x)
335 for (i = 0; i < 16; ++i)
336 ;
337#pragma omp parallel
338#pragma omp for lastprivate(x, y) firstprivate(x, y)
339 for (i = 0; i < 16; ++i)
340 ;
341#pragma omp parallel
342#pragma omp for lastprivate(x, y, z) firstprivate(x, y, z)
343 for (i = 0; i < 16; ++i)
344 ;
345}
346
347void test_loop_messages() {
348 float a[100], b[100], c[100];
349#pragma omp parallel
350// expected-error@+2 {{variable must be of integer or pointer type}}
351#pragma omp for
352 for (float fi = 0; fi < 10.0; fi++) {
353 c[(int)fi] = a[(int)fi] + b[(int)fi];
354 }
355#pragma omp parallel
356// expected-error@+2 {{variable must be of integer or pointer type}}
357#pragma omp for
358 for (double fi = 0; fi < 10.0; fi++) {
359 c[(int)fi] = a[(int)fi] + b[(int)fi];
360 }
361}
362