1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -triple x86_64-unknown-unknown -verify %s
3 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -triple x86_64-unknown-unknown -verify %s
5 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp taskloop'}}
8 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp taskloop'}}
9 #pragma omp taskloop foo
11 void test_no_clause() {
14 for (i = 0; i < 16; ++i)
17 // expected-error@+2 {{statement after '#pragma omp taskloop' must be a for loop}}
22 void test_branch_protected_scope() {
31 for (i = 0; i < 16; ++i) {
33 goto L1; // expected-error {{use of undeclared label 'L1'}}
35 return; // expected-error {{cannot return from OpenMP region}}
45 goto L2; // expected-error {{use of undeclared label 'L2'}}
50 void test_invalid_clause() {
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)
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)
63 void test_non_identifiers() {
67 // expected-warning@+1 {{extra tokens at the end of '#pragma omp taskloop' are ignored}}
69 for (i = 0; i < 16; ++i)
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'}}
74 #pragma omp taskloop linear(x);
75 for (i = 0; i < 16; ++i)
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)
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)
93 void test_collapse() {
96 // expected-error@+1 {{expected '('}}
97 #pragma omp taskloop collapse
98 for (i = 0; i < 16; ++i)
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)
106 // expected-error@+1 {{expected expression}}
107 #pragma omp taskloop collapse()
108 for (i = 0; i < 16; ++i)
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)
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)
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)
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}}
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}}
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}}
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}}
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}}
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}}
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)
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}}
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)
180 // expected-error@+1 {{expression is not an integer constant expression}}
181 #pragma omp taskloop collapse(foo())
182 for (i = 0; i < 16; ++i)
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)
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)
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)
201 void test_private() {
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)
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)
216 // expected-error@+1 2 {{expected expression}}
217 #pragma omp taskloop private(, )
218 for (i = 0; i < 16; ++i)
221 // expected-error@+1 {{expected expression}}
222 #pragma omp taskloop private()
223 for (i = 0; i < 16; ++i)
226 // expected-error@+1 {{expected expression}}
227 #pragma omp taskloop private(int)
228 for (i = 0; i < 16; ++i)
231 // expected-error@+1 {{expected variable name}}
232 #pragma omp taskloop private(0)
233 for (i = 0; i < 16; ++i)
238 #pragma omp taskloop private(x)
239 for (i = 0; i < 16; ++i)
242 #pragma omp taskloop private(x, y)
243 for (i = 0; i < 16; ++i)
246 #pragma omp taskloop private(x, y, z)
247 for (i = 0; i < 16; ++i) {
252 void test_lastprivate() {
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)
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)
268 // expected-error@+1 2 {{expected expression}}
269 #pragma omp taskloop lastprivate(, )
270 for (i = 0; i < 16; ++i)
273 // expected-error@+1 {{expected expression}}
274 #pragma omp taskloop lastprivate()
275 for (i = 0; i < 16; ++i)
278 // expected-error@+1 {{expected expression}}
279 #pragma omp taskloop lastprivate(int)
280 for (i = 0; i < 16; ++i)
283 // expected-error@+1 {{expected variable name}}
284 #pragma omp taskloop lastprivate(0)
285 for (i = 0; i < 16; ++i)
290 #pragma omp taskloop lastprivate(x)
291 for (i = 0; i < 16; ++i)
294 #pragma omp taskloop lastprivate(x, y)
295 for (i = 0; i < 16; ++i)
298 #pragma omp taskloop lastprivate(x, y, z)
299 for (i = 0; i < 16; ++i)
303 void test_firstprivate() {
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)
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)
319 // expected-error@+1 2 {{expected expression}}
320 #pragma omp taskloop firstprivate(, )
321 for (i = 0; i < 16; ++i)
324 // expected-error@+1 {{expected expression}}
325 #pragma omp taskloop firstprivate()
326 for (i = 0; i < 16; ++i)
329 // expected-error@+1 {{expected expression}}
330 #pragma omp taskloop firstprivate(int)
331 for (i = 0; i < 16; ++i)
334 // expected-error@+1 {{expected variable name}}
335 #pragma omp taskloop firstprivate(0)
336 for (i = 0; i < 16; ++i)
341 #pragma omp taskloop lastprivate(x) firstprivate(x)
342 for (i = 0; i < 16; ++i)
345 #pragma omp taskloop lastprivate(x, y) firstprivate(x, y)
346 for (i = 0; i < 16; ++i)
349 #pragma omp taskloop lastprivate(x, y, z) firstprivate(x, y, z)
350 for (i = 0; i < 16; ++i)
354 void test_loop_messages() {
355 float a[100], b[100], c[100];
357 // expected-error@+2 {{variable must be of integer or pointer type}}
359 for (float fi = 0; fi < 10.0; fi++) {
360 c[(int)fi] = a[(int)fi] + b[(int)fi];
363 // expected-error@+2 {{variable must be of integer or pointer type}}
365 for (double fi = 0; fi < 10.0; fi++) {
366 c[(int)fi] = a[(int)fi] + b[(int)fi];
369 // expected-warning@+2 {{OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed}}
371 for (__int128 ii = 0; ii < 10; ii++) {
372 c[ii] = a[ii] + b[ii];