]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/OpenMP/for_misc_messages.c
Vendor import of clang trunk r338150:
[FreeBSD/FreeBSD.git] / test / OpenMP / for_misc_messages.c
1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -triple x86_64-unknown-unknown -verify %s
2
3 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -triple x86_64-unknown-unknown -verify %s
4
5 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp for'}}
6 #pragma omp for
7
8 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp for'}}
9 #pragma omp for foo
10
11 void test_no_clause() {
12   int i;
13 #pragma omp for
14   for (i = 0; i < 16; ++i)
15     ;
16
17 // expected-error@+2 {{statement after '#pragma omp for' must be a for loop}}
18 #pragma omp for
19   ++i;
20 }
21
22 void test_branch_protected_scope() {
23   int i = 0;
24 L1:
25   ++i;
26
27   int x[24];
28
29 #pragma omp parallel
30 #pragma omp for
31   for (i = 0; i < 16; ++i) {
32     if (i == 5)
33       goto L1; // expected-error {{use of undeclared label 'L1'}}
34     else if (i == 6)
35       return; // expected-error {{cannot return from OpenMP region}}
36     else if (i == 7)
37       goto L2;
38     else if (i == 8) {
39     L2:
40       x[i]++;
41     }
42   }
43
44   if (x[0] == 0)
45     goto L2; // expected-error {{use of undeclared label 'L2'}}
46   else if (x[1] == 1)
47     goto L1;
48 }
49
50 void test_invalid_clause() {
51   int i;
52 #pragma omp parallel
53 // expected-warning@+1 {{extra tokens at the end of '#pragma omp for' are ignored}}
54 #pragma omp for foo bar
55   for (i = 0; i < 16; ++i)
56     ;
57 // At one time, this failed an assert.
58 // expected-error@+1 {{unexpected OpenMP clause 'num_teams' in directive '#pragma omp for'}}
59 #pragma omp for num_teams(3)
60   for (i = 0; i < 16; ++i)
61     ;
62 // At one time, this error was reported twice.
63 // expected-error@+1 {{unexpected OpenMP clause 'uniform' in directive '#pragma omp for'}}
64 #pragma omp for uniform
65   for (i = 0; i < 16; ++i)
66     ;
67 // expected-error@+1 {{unexpected OpenMP clause 'if' in directive '#pragma omp for'}}
68 #pragma omp for if(0)
69   for (i = 0; i < 16; ++i)
70     ;
71 }
72
73 void test_non_identifiers() {
74   int i, x;
75
76 #pragma omp parallel
77 // expected-warning@+1 {{extra tokens at the end of '#pragma omp for' are ignored}}
78 #pragma omp for;
79   for (i = 0; i < 16; ++i)
80     ;
81 // expected-warning@+2 {{extra tokens at the end of '#pragma omp for' are ignored}}
82 #pragma omp parallel
83 #pragma omp for linear(x);
84   for (i = 0; i < 16; ++i)
85     ;
86
87 #pragma omp parallel
88 // expected-warning@+1 {{extra tokens at the end of '#pragma omp for' are ignored}}
89 #pragma omp for private(x);
90   for (i = 0; i < 16; ++i)
91     ;
92
93 #pragma omp parallel
94 // expected-warning@+1 {{extra tokens at the end of '#pragma omp for' are ignored}}
95 #pragma omp for, private(x);
96   for (i = 0; i < 16; ++i)
97     ;
98 }
99
100 extern int foo();
101
102 void test_collapse() {
103   int i;
104 #pragma omp parallel
105 // expected-error@+1 {{expected '('}}
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-error@+1 {{expected expression}}
116 #pragma omp for collapse()
117   for (i = 0; i < 16; ++i)
118     ;
119 #pragma omp parallel
120 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
121 #pragma omp for collapse(,
122   for (i = 0; i < 16; ++i)
123     ;
124 #pragma omp parallel
125 // expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
126 #pragma omp for collapse(, )
127   for (i = 0; i < 16; ++i)
128     ;
129 #pragma omp parallel
130 // expected-warning@+2 {{extra tokens at the end of '#pragma omp for' are ignored}}
131 // expected-error@+1 {{expected '('}}
132 #pragma omp for collapse 4)
133   for (i = 0; i < 16; ++i)
134     ;
135 #pragma omp parallel
136 // expected-error@+2 {{expected ')'}}
137 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
138 #pragma omp for collapse(4
139   for (i = 0; i < 16; ++i)
140     ; // expected-error {{expected 4 for loops after '#pragma omp for', but found only 1}}
141 #pragma omp parallel
142 // expected-error@+2 {{expected ')'}}
143 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
144 #pragma omp for collapse(4,
145   for (i = 0; i < 16; ++i)
146     ; // expected-error {{expected 4 for loops after '#pragma omp for', but found only 1}}
147 #pragma omp parallel
148 // expected-error@+2 {{expected ')'}}
149 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
150 #pragma omp for collapse(4, )
151   for (i = 0; i < 16; ++i)
152     ; // expected-error {{expected 4 for loops after '#pragma omp for', but found only 1}}
153 #pragma omp parallel
154 // expected-note@+1 {{as specified in 'collapse' clause}}
155 #pragma omp for collapse(4)
156   for (i = 0; i < 16; ++i)
157     ; // expected-error {{expected 4 for loops after '#pragma omp for', but found only 1}}
158 #pragma omp parallel
159 // expected-error@+2 {{expected ')'}}
160 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
161 #pragma omp for collapse(4 4)
162   for (i = 0; i < 16; ++i)
163     ; // expected-error {{expected 4 for loops after '#pragma omp for', but found only 1}}
164 #pragma omp parallel
165 // expected-error@+2 {{expected ')'}}
166 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
167 #pragma omp for collapse(4, , 4)
168   for (i = 0; i < 16; ++i)
169     ; // expected-error {{expected 4 for loops after '#pragma omp for', but found only 1}}
170 #pragma omp parallel
171 #pragma omp for collapse(4)
172   for (int i1 = 0; i1 < 16; ++i1)
173     for (int i2 = 0; i2 < 16; ++i2)
174       for (int i3 = 0; i3 < 16; ++i3)
175         for (int i4 = 0; i4 < 16; ++i4)
176           foo();
177 #pragma omp parallel
178 // expected-error@+2 {{expected ')'}}
179 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
180 #pragma omp for collapse(4, 8)
181   for (i = 0; i < 16; ++i)
182     ; // expected-error {{expected 4 for loops after '#pragma omp for', but found only 1}}
183 #pragma omp parallel
184 // expected-error@+1 {{expression is not an integer constant expression}}
185 #pragma omp for collapse(2.5)
186   for (i = 0; i < 16; ++i)
187     ;
188 #pragma omp parallel
189 // expected-error@+1 {{expression is not an integer constant expression}}
190 #pragma omp for collapse(foo())
191   for (i = 0; i < 16; ++i)
192     ;
193 #pragma omp parallel
194 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
195 #pragma omp for collapse(-5)
196   for (i = 0; i < 16; ++i)
197     ;
198 #pragma omp parallel
199 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
200 #pragma omp for collapse(0)
201   for (i = 0; i < 16; ++i)
202     ;
203 #pragma omp parallel
204 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
205 #pragma omp for collapse(5 - 5)
206   for (i = 0; i < 16; ++i)
207     ;
208 #pragma omp parallel
209 #pragma omp for collapse(2)
210   for (i = 0; i < 16; ++i)
211 // 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?}}
212     for (int j = 0; j < 16; ++j)
213 // expected-error@+2 {{reduction variable must be shared}}
214 // expected-error@+1 {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
215 #pragma omp for reduction(+ : i, j)
216       for (int k = 0; k < 16; ++k)
217         i += j;
218 }
219
220 void test_private() {
221   int i;
222 #pragma omp parallel
223 // expected-error@+2 {{expected expression}}
224 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
225 #pragma omp for private(
226   for (i = 0; i < 16; ++i)
227     ;
228 #pragma omp parallel
229 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
230 // expected-error@+1 2 {{expected expression}}
231 #pragma omp for private(,
232   for (i = 0; i < 16; ++i)
233     ;
234 #pragma omp parallel
235 // expected-error@+1 2 {{expected expression}}
236 #pragma omp for private(, )
237   for (i = 0; i < 16; ++i)
238     ;
239 #pragma omp parallel
240 // expected-error@+1 {{expected expression}}
241 #pragma omp for private()
242   for (i = 0; i < 16; ++i)
243     ;
244 #pragma omp parallel
245 // expected-error@+1 {{expected expression}}
246 #pragma omp for private(int)
247   for (i = 0; i < 16; ++i)
248     ;
249 #pragma omp parallel
250 // expected-error@+1 {{expected variable name}}
251 #pragma omp for private(0)
252   for (i = 0; i < 16; ++i)
253     ;
254
255   int x, y, z;
256 #pragma omp parallel
257 #pragma omp for private(x)
258   for (i = 0; i < 16; ++i)
259     ;
260 #pragma omp parallel
261 #pragma omp for private(x, y)
262   for (i = 0; i < 16; ++i)
263     ;
264 #pragma omp parallel
265 #pragma omp for private(x, y, z)
266   for (i = 0; i < 16; ++i) {
267     x = y * i + z;
268   }
269 }
270
271 void test_lastprivate() {
272   int i;
273 #pragma omp parallel
274 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
275 // expected-error@+1 {{expected expression}}
276 #pragma omp for lastprivate(
277   for (i = 0; i < 16; ++i)
278     ;
279
280 #pragma omp parallel
281 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
282 // expected-error@+1 2 {{expected expression}}
283 #pragma omp for lastprivate(,
284   for (i = 0; i < 16; ++i)
285     ;
286 #pragma omp parallel
287 // expected-error@+1 2 {{expected expression}}
288 #pragma omp for lastprivate(, )
289   for (i = 0; i < 16; ++i)
290     ;
291 #pragma omp parallel
292 // expected-error@+1 {{expected expression}}
293 #pragma omp for lastprivate()
294   for (i = 0; i < 16; ++i)
295     ;
296 #pragma omp parallel
297 // expected-error@+1 {{expected expression}}
298 #pragma omp for lastprivate(int)
299   for (i = 0; i < 16; ++i)
300     ;
301 #pragma omp parallel
302 // expected-error@+1 {{expected variable name}}
303 #pragma omp for lastprivate(0)
304   for (i = 0; i < 16; ++i)
305     ;
306
307   int x, y, z;
308 #pragma omp parallel
309 #pragma omp for lastprivate(x)
310   for (i = 0; i < 16; ++i)
311     ;
312 #pragma omp parallel
313 #pragma omp for lastprivate(x, y)
314   for (i = 0; i < 16; ++i)
315     ;
316 #pragma omp parallel
317 #pragma omp for lastprivate(x, y, z)
318   for (i = 0; i < 16; ++i)
319     ;
320 }
321
322 void test_firstprivate() {
323   int i;
324 #pragma omp parallel
325 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
326 // expected-error@+1 {{expected expression}}
327 #pragma omp for firstprivate(
328   for (i = 0; i < 16; ++i)
329     ;
330
331 #pragma omp parallel
332 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
333 // expected-error@+1 2 {{expected expression}}
334 #pragma omp for firstprivate(,
335   for (i = 0; i < 16; ++i)
336     ;
337 #pragma omp parallel
338 // expected-error@+1 2 {{expected expression}}
339 #pragma omp for firstprivate(, )
340   for (i = 0; i < 16; ++i)
341     ;
342 #pragma omp parallel
343 // expected-error@+1 {{expected expression}}
344 #pragma omp for firstprivate()
345   for (i = 0; i < 16; ++i)
346     ;
347 #pragma omp parallel
348 // expected-error@+1 {{expected expression}}
349 #pragma omp for firstprivate(int)
350   for (i = 0; i < 16; ++i)
351     ;
352 #pragma omp parallel
353 // expected-error@+1 {{expected variable name}}
354 #pragma omp for firstprivate(0)
355   for (i = 0; i < 16; ++i)
356     ;
357
358   int x, y, z;
359 #pragma omp parallel
360 #pragma omp for lastprivate(x) firstprivate(x)
361   for (i = 0; i < 16; ++i)
362     ;
363 #pragma omp parallel
364 #pragma omp for lastprivate(x, y) firstprivate(x, y)
365   for (i = 0; i < 16; ++i)
366     ;
367 #pragma omp parallel
368 #pragma omp for lastprivate(x, y, z) firstprivate(x, y, z)
369   for (i = 0; i < 16; ++i)
370     ;
371 }
372
373 void test_loop_messages() {
374   float a[100], b[100], c[100];
375 #pragma omp parallel
376 // expected-error@+2 {{variable must be of integer or pointer type}}
377 #pragma omp for
378   for (float fi = 0; fi < 10.0; fi++) {
379     c[(int)fi] = a[(int)fi] + b[(int)fi];
380   }
381 #pragma omp parallel
382 // expected-error@+2 {{variable must be of integer or pointer type}}
383 #pragma omp for
384   for (double fi = 0; fi < 10.0; fi++) {
385     c[(int)fi] = a[(int)fi] + b[(int)fi];
386   }
387
388   // expected-warning@+2 {{OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed}}
389   #pragma omp for
390   for (__int128 ii = 0; ii < 10; ii++) {
391     c[ii] = a[ii] + b[ii];
392   }
393 }
394