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