1 // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -o - %s -Wuninitialized
2 // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -std=c++98 -o - %s -Wuninitialized
3 // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -std=c++11 -o - %s -Wuninitialized
4 // RUN: %clang_cc1 -verify=expected,omp52 -fopenmp -fopenmp-version=52 -ferror-limit 100 -o - %s -Wuninitialized
6 // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 -o - %s -Wuninitialized
7 // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 -std=c++98 -o - %s -Wuninitialized
8 // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 -std=c++11 -o - %s -Wuninitialized
11 int x
; // expected-note {{initialize the variable 'x' to silence this warning}}
12 #pragma omp for ordered
13 for (int i
= 0; i
< 10; ++i
) {
15 argc
= x
; // expected-warning {{variable 'x' is uninitialized when used here}}
20 #if __cplusplus >= 201103L
21 // expected-note@-2 {{declared here}}
27 #pragma omp for ordered
28 for (int i
= 0; i
< 10; ++i
) {
34 goto L1
; // expected-error {{use of undeclared label 'L1'}}
37 #pragma omp for ordered
38 for (int i
= 0; i
< 10; ++i
) {
40 goto L2
; // expected-error {{use of undeclared label 'L2'}}
47 #pragma omp for ordered
48 for (int i
= 0; i
< 10; ++i
) {
49 #pragma omp ordered threads threads // expected-error {{directive '#pragma omp ordered' cannot contain more than one 'threads' clause}}
54 #pragma omp for ordered(1) // expected-note {{'ordered' clause with specified parameter}}
55 for (int i
= 0; i
< 10; ++i
) {
56 #pragma omp ordered // expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
61 #pragma omp for ordered(1) // expected-note {{'ordered' clause with specified parameter}}
62 for (int i
= 0; i
< 10; ++i
) {
63 #pragma omp ordered threads // expected-error {{'ordered' directive with 'threads' clause cannot be closely nested inside ordered region with specified parameter}}
68 #pragma omp for ordered
69 for (int i
= 0; i
< 10; ++i
) {
70 #pragma omp ordered // expected-note {{previous 'ordered' directive used here}}
74 #pragma omp ordered // expected-error {{exactly one 'ordered' directive must appear in the loop body of an enclosing directive}}
79 #pragma omp ordered simd simd // expected-error {{directive '#pragma omp ordered' cannot contain more than one 'simd' clause}}
84 for (int i
= 0; i
< 10; ++i
) {
85 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
91 for (int i
= 0; i
< 10; ++i
) {
92 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
98 for (int i
= 0; i
< 10; ++i
) {
99 #pragma omp ordered simd // expected-note {{previous 'ordered' directive used here}}
103 #pragma omp ordered simd // expected-error {{exactly one 'ordered' directive must appear in the loop body of an enclosing directive}}
109 for (int i
= 0; i
< 10; ++i
) {
110 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
116 for (int i
= 0; i
< 10; ++i
) {
117 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
122 #pragma omp parallel for simd
123 for (int i
= 0; i
< 10; ++i
) {
124 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
129 #pragma omp parallel for simd
130 for (int i
= 0; i
< 10; ++i
) {
131 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
135 #if _OPENMP >= 202111
136 #pragma omp ordered doacross(source:omp_cur_iteration) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
138 #pragma omp ordered depend(source) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
141 #pragma omp parallel for ordered
142 for (int i
= 0; i
< 10; ++i
) {
143 #if _OPENMP >= 202111
144 #pragma omp ordered doacross(source:) // omp52-error {{'ordered' directive with 'doacross' clause cannot be closely nested inside ordered region without specified parameter}}
145 #pragma omp ordered doacross(sink : i) // omp52-error {{'ordered' directive with 'doacross' clause cannot be closely nested inside ordered region without specified parameter}}
147 #pragma omp ordered depend(source) // expected-error {{'ordered' directive with 'depend' clause cannot be closely nested inside ordered region without specified parameter}}
148 #pragma omp ordered depend(sink : i) // expected-error {{'ordered' directive with 'depend' clause cannot be closely nested inside ordered region without specified parameter}}
151 #pragma omp parallel for ordered(2) // expected-note 3 {{'ordered' clause with specified parameter}}
152 for (int i
= 0; i
< 10; ++i
) {
153 for (int j
= 0; j
< 10; ++j
) {
154 #if _OPENMP >= 202111
155 #pragma omp ordered doacross // omp52-error {{expected '(' after 'doacross'}} omp52-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
156 #pragma omp ordered doacross( // omp52-error {{expected ')'}} omp52-error {{expected 'source' or 'sink' in OpenMP clause 'doacross'}} omp52-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}} omp52-warning {{missing ':' or ')' after dependence-type - ignoring}} omp52-note {{to match this '('}}
157 #pragma omp ordered doacross(source // omp52-warning {{missing ':' or ')' after dependence-type - ignoring}} omp52-error {{expected ')'}} omp52-note {{to match this '('}}
158 #pragma omp ordered doacross(sink // omp52-error {{expected expression}} omp52-warning {{missing ':' or ')' after dependence-type - ignoring}} omp52-error {{expected ')'}} omp52-note {{to match this '('}} omp52-error {{expected 'i' loop iteration variable}}
159 #pragma omp ordered doacross(sink : // omp52-error {{expected ')'}} omp52-note {{to match this '('}} omp52-error {{expected expression}} omp52-error {{expected 'i' loop iteration variable}}
160 #pragma omp ordered doacross(sink : i // omp52-error {{expected ')'}} omp52-note {{to match this '('}} omp52-error {{expected 'j' loop iteration variable}}
161 #pragma omp ordered doacross(sink : i) // omp52-error {{expected 'j' loop iteration variable}}
162 #pragma omp ordered doacross(sink:omp_cur_iteration + 1) // omp52-error {{'doacross sink:' must be with 'omp_cur_iteration - 1'}}
163 #pragma omp ordered doacross(sink:omp_cur_iteration - 2) // omp52-error {{'doacross sink:' must be with 'omp_cur_iteration - 1'}}
164 #pragma omp ordered doacross(sink:omp_cur_iteration) // omp52-error {{'doacross sink:' must be with 'omp_cur_iteration - 1'}}
165 #pragma omp ordered doacross(source:omp_cur_iteration - 1) // omp52-error {{'doacross source:' must be with 'omp_cur_iteration'}}
166 #pragma omp ordered doacross(source:)
168 #pragma omp ordered doacross(source:) // omp52-error {{'#pragma omp ordered' with 'doacross' clause cannot be an immediate substatement}}
171 #pragma omp ordered doacross(sink : i, j) // omp52-error {{'#pragma omp ordered' with 'doacross' clause cannot be an immediate substatement}}
173 #pragma omp ordered doacross(source:) threads // omp52-error {{'doacross' clauses cannot be mixed with 'threads' clause}}
174 #pragma omp ordered simd doacross(source:) // omp52-error {{'doacross' clauses cannot be mixed with 'simd' clause}}
175 #pragma omp ordered doacross(source:) doacross(source:) // omp52-error {{directive '#pragma omp ordered' cannot contain more than one 'doacross' clause with 'source' dependence}}
176 #pragma omp ordered doacross(in : i) // omp52-error {{expected 'source' or 'sink' in OpenMP clause 'doacross'}} omp52-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
177 #pragma omp ordered doacross(sink : i, j)
178 #pragma omp ordered doacross(sink : j, i) // omp52-error {{expected 'i' loop iteration variable}} omp52-error {{expected 'j' loop iteration variable}}
179 #pragma omp ordered doacross(sink : i, j, k) // omp52-error {{unexpected expression: number of expressions is larger than the number of associated loops}}
180 #pragma omp ordered doacross(sink : i+foo(), j/4) // omp52-error {{integral constant expression}} omp52-error {{expected '+' or '-' operation}}
181 #if __cplusplus >= 201103L
182 // omp52-note@-2 {{non-constexpr function 'foo' cannot be used in a constant expression}}
184 #pragma omp ordered doacross(sink : i*0, j-4)// omp52-error {{expected '+' or '-' operation}}
185 #pragma omp ordered doacross(sink : i-0, j+sizeof(T)) doacross(sink : i-0, j+sizeof(T))
186 #pragma omp ordered doacross(sink : i-0, j+sizeof(T)) doacross(source:) // omp52-error {{'doacross(source)' clause cannot be mixed with 'doacross(sink:vec)' clauses}}
187 #pragma omp ordered doacross(source:) doacross(sink : i-0, j+sizeof(T)) // omp52-error {{'doacross(sink:vec)' clauses cannot be mixed with 'doacross(source)' clause}}
189 #pragma omp ordered depend // expected-error {{expected '(' after 'depend'}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
190 #pragma omp ordered depend( // expected-error {{expected ')'}} expected-error {{expected 'source' or 'sink' in OpenMP clause 'depend'}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}} expected-warning {{missing ':' or ')' after dependency type - ignoring}} expected-note {{to match this '('}}
191 #pragma omp ordered depend(source // expected-error {{expected ')'}} expected-note {{to match this '('}}
192 #pragma omp ordered depend(sink // expected-error {{expected expression}} expected-warning {{missing ':' or ')' after dependency type - ignoring}} expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected 'i' loop iteration variable}}
193 #pragma omp ordered depend(sink : // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}} expected-error {{expected 'i' loop iteration variable}}
194 #pragma omp ordered depend(sink : i // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected 'j' loop iteration variable}}
195 #pragma omp ordered depend(sink : i) // expected-error {{expected 'j' loop iteration variable}}
196 #pragma omp ordered depend(source)
198 #pragma omp ordered depend(source) // expected-error {{'#pragma omp ordered' with 'depend' clause cannot be an immediate substatement}}
201 #pragma omp ordered depend(sink : i, j) // expected-error {{'#pragma omp ordered' with 'depend' clause cannot be an immediate substatement}}
203 #pragma omp ordered depend(source) threads // expected-error {{'depend' clauses cannot be mixed with 'threads' clause}}
204 #pragma omp ordered simd depend(source) // expected-error {{'depend' clauses cannot be mixed with 'simd' clause}}
205 #pragma omp ordered depend(source) depend(source) // expected-error {{directive '#pragma omp ordered' cannot contain more than one 'depend' clause with 'source' dependence}}
206 #pragma omp ordered depend(in : i) // expected-error {{expected 'source' or 'sink' in OpenMP clause 'depend'}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
207 #pragma omp ordered depend(sink : i, j)
208 #pragma omp ordered depend(sink : j, i) // expected-error {{expected 'i' loop iteration variable}} expected-error {{expected 'j' loop iteration variable}}
209 #pragma omp ordered depend(sink : i, j, k) // expected-error {{unexpected expression: number of expressions is larger than the number of associated loops}}
210 #pragma omp ordered depend(sink : i+foo(), j/4) // expected-error {{integral constant expression}} expected-error {{expected '+' or '-' operation}}
211 #if __cplusplus >= 201103L
212 // expected-note@-2 {{non-constexpr function 'foo' cannot be used in a constant expression}}
214 #pragma omp ordered depend(sink : i*0, j-4)// expected-error {{expected '+' or '-' operation}}
215 #pragma omp ordered depend(sink : i-0, j+sizeof(T)) depend(sink : i-0, j+sizeof(T))
216 #pragma omp ordered depend(sink : i-0, j+sizeof(T)) depend(source) // expected-error {{'depend(source)' clause cannot be mixed with 'depend(sink:vec)' clauses}}
217 #pragma omp ordered depend(source) depend(sink : i-0, j+sizeof(T)) // expected-error {{'depend(sink:vec)' clauses cannot be mixed with 'depend(source)' clause}}
221 #if _OPENMP >= 202111
223 #pragma omp ordered depend(source) // expected-error {{'ordered' directive with 'depend' clause cannot be closely nested inside ordered region without specified parameter}}
224 #pragma omp ordered depend(sink:k) // expected-error {{'ordered' directive with 'depend' clause cannot be closely nested inside ordered region without specified parameter}}
230 #if __cplusplus >= 201103L
231 // expected-note@-2 {{declared here}}
234 #pragma omp for ordered
235 for (int i
= 0; i
< 10; ++i
) {
241 goto L1
; // expected-error {{use of undeclared label 'L1'}}
244 #pragma omp for ordered
245 for (int i
= 0; i
< 10; ++i
) {
247 goto L2
; // expected-error {{use of undeclared label 'L2'}}
254 #pragma omp for ordered
255 for (int i
= 0; i
< 10; ++i
) {
256 #pragma omp ordered threads threads // expected-error {{directive '#pragma omp ordered' cannot contain more than one 'threads' clause}}
261 #pragma omp for ordered(1) // expected-note {{'ordered' clause with specified parameter}}
262 for (int i
= 0; i
< 10; ++i
) {
263 #pragma omp ordered // expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
268 #pragma omp for ordered(1) // expected-note {{'ordered' clause with specified parameter}}
269 for (int i
= 0; i
< 10; ++i
) {
270 #pragma omp ordered threads // expected-error {{'ordered' directive with 'threads' clause cannot be closely nested inside ordered region with specified parameter}}
275 #pragma omp ordered simd simd // expected-error {{directive '#pragma omp ordered' cannot contain more than one 'simd' clause}}
280 for (int i
= 0; i
< 10; ++i
) {
281 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
287 for (int i
= 0; i
< 10; ++i
) {
288 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
294 for (int i
= 0; i
< 10; ++i
) {
295 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
301 for (int i
= 0; i
< 10; ++i
) {
302 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
307 #pragma omp parallel for simd
308 for (int i
= 0; i
< 10; ++i
) {
309 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
314 #pragma omp parallel for simd
315 for (int i
= 0; i
< 10; ++i
) {
316 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
320 #if _OPENMP >= 202111
321 #pragma omp ordered doacross(source:omp_cur_iteration) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
323 #pragma omp ordered depend(source) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
326 #pragma omp parallel for ordered
327 for (int i
= 0; i
< 10; ++i
) {
328 #if _OPENMP >= 202111
330 #pragma omp ordered depend(source) // expected-error {{'ordered' directive with 'depend' clause cannot be closely nested inside ordered region without specified parameter}}
331 #pragma omp ordered depend(sink : i) // expected-error {{'ordered' directive with 'depend' clause cannot be closely nested inside ordered region without specified parameter}}
334 #pragma omp parallel for ordered(2) // expected-note 3 {{'ordered' clause with specified parameter}}
335 for (int i
= 0; i
< 10; ++i
) {
336 for (int j
= 0; j
< 10; ++j
) {
337 #if _OPENMP >= 202111
338 #pragma omp ordered doacross // omp52-error {{expected '(' after 'doacross'}} omp52-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
339 #pragma omp ordered doacross( // omp52-error {{expected ')'}} omp52-error {{expected 'source' or 'sink' in OpenMP clause 'doacross'}} omp52-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}} omp52-warning {{missing ':' or ')' after dependence-type - ignoring}} omp52-note {{to match this '('}}
340 #pragma omp ordered doacross(source // omp52-warning {{missing ':' or ')' after dependence-type - ignoring}} omp52-error {{expected ')'}} omp52-note {{to match this '('}}
341 #pragma omp ordered doacross(sink // omp52-error {{expected expression}} omp52-warning {{missing ':' or ')' after dependence-type - ignoring}} omp52-error {{expected ')'}} omp52-note {{to match this '('}} omp52-error {{expected 'i' loop iteration variable}}
342 #pragma omp ordered doacross(sink : // omp52-error {{expected ')'}} omp52-note {{to match this '('}} omp52-error {{expected expression}} omp52-error {{expected 'i' loop iteration variable}}
343 #pragma omp ordered doacross(sink : i // omp52-error {{expected ')'}} omp52-note {{to match this '('}} omp52-error {{expected 'j' loop iteration variable}}
344 #pragma omp ordered doacross(sink : i) // omp52-error {{expected 'j' loop iteration variable}}
345 #pragma omp ordered doacross(source:)
347 #pragma omp ordered doacross(source:) // omp52-error {{'#pragma omp ordered' with 'doacross' clause cannot be an immediate substatement}}
350 #pragma omp ordered doacross(sink : i, j) // omp52-error {{'#pragma omp ordered' with 'doacross' clause cannot be an immediate substatement}}
352 #pragma omp ordered doacross(source:) threads // omp52-error {{'doacross' clauses cannot be mixed with 'threads' clause}}
353 #pragma omp ordered simd doacross(source:) // omp52-error {{'doacross' clauses cannot be mixed with 'simd' clause}}
354 #pragma omp ordered doacross(source:) doacross(source:) // omp52-error {{directive '#pragma omp ordered' cannot contain more than one 'doacross' clause with 'source' dependence}}
355 #pragma omp ordered doacross(in : i) // omp52-error {{expected 'source' or 'sink' in OpenMP clause 'doacross'}} omp52-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
356 #pragma omp ordered doacross(sink : i, j) allocate(i) // omp52-error {{unexpected OpenMP clause 'allocate' in directive '#pragma omp ordered'}}
357 #pragma omp ordered doacross(sink : j, i) // omp52-error {{expected 'i' loop iteration variable}} omp52-error {{expected 'j' loop iteration variable}}
358 #pragma omp ordered doacross(sink : i, j, k) // omp52-error {{unexpected expression: number of expressions is larger than the number of associated loops}}
359 #pragma omp ordered doacross(sink : i+foo(), j/4) // omp52-error {{integral constant expression}} omp52-error {{expected '+' or '-' operation}}
360 #if __cplusplus >= 201103L
361 // omp52-note@-2 {{non-constexpr function 'foo' cannot be used in a constant expression}}
363 #pragma omp ordered doacross(sink : i*0, j-4)// omp52-error {{expected '+' or '-' operation}}
364 #pragma omp ordered doacross(sink : i-0, j+sizeof(int)) doacross(sink : i-0, j+sizeof(int))
365 #pragma omp ordered doacross(sink : i-0, j+sizeof(int)) doacross(source:) // omp52-error {{'doacross(source)' clause cannot be mixed with 'doacross(sink:vec)' clauses}}
366 #pragma omp ordered doacross(source:) doacross(sink : i-0, j+sizeof(int)) // omp52-error {{'doacross(sink:vec)' clauses cannot be mixed with 'doacross(source)' clause}}
368 #pragma omp ordered depend // expected-error {{expected '(' after 'depend'}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
369 #pragma omp ordered depend( // expected-error {{expected ')'}} expected-error {{expected 'source' or 'sink' in OpenMP clause 'depend'}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}} expected-warning {{missing ':' or ')' after dependency type - ignoring}} expected-note {{to match this '('}}
370 #pragma omp ordered depend(source // expected-error {{expected ')'}} expected-note {{to match this '('}}
371 #pragma omp ordered depend(sink // expected-error {{expected expression}} expected-warning {{missing ':' or ')' after dependency type - ignoring}} expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected 'i' loop iteration variable}}
372 #pragma omp ordered depend(sink : // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}} expected-error {{expected 'i' loop iteration variable}}
373 #pragma omp ordered depend(sink : i // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected 'j' loop iteration variable}}
374 #pragma omp ordered depend(sink : i) // expected-error {{expected 'j' loop iteration variable}}
375 #pragma omp ordered depend(source)
377 #pragma omp ordered depend(source) // expected-error {{'#pragma omp ordered' with 'depend' clause cannot be an immediate substatement}}
380 #pragma omp ordered depend(sink : i, j) // expected-error {{'#pragma omp ordered' with 'depend' clause cannot be an immediate substatement}}
382 #pragma omp ordered depend(source) threads // expected-error {{'depend' clauses cannot be mixed with 'threads' clause}}
383 #pragma omp ordered simd depend(source) // expected-error {{'depend' clauses cannot be mixed with 'simd' clause}}
384 #pragma omp ordered depend(source) depend(source) // expected-error {{directive '#pragma omp ordered' cannot contain more than one 'depend' clause with 'source' dependence}}
385 #pragma omp ordered depend(in : i) // expected-error {{expected 'source' or 'sink' in OpenMP clause 'depend'}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
386 #pragma omp ordered depend(sink : i, j) allocate(i) // expected-error {{unexpected OpenMP clause 'allocate' in directive '#pragma omp ordered'}}
387 #pragma omp ordered depend(sink : j, i) // expected-error {{expected 'i' loop iteration variable}} expected-error {{expected 'j' loop iteration variable}}
388 #pragma omp ordered depend(sink : i, j, k) // expected-error {{unexpected expression: number of expressions is larger than the number of associated loops}}
389 #pragma omp ordered depend(sink : i+foo(), j/4) // expected-error {{integral constant expression}} expected-error {{expected '+' or '-' operation}}
390 #if __cplusplus >= 201103L
391 // expected-note@-2 {{non-constexpr function 'foo' cannot be used in a constant expression}}
393 #pragma omp ordered depend(sink : i*0, j-4)// expected-error {{expected '+' or '-' operation}}
394 #pragma omp ordered depend(sink : i-0, j+sizeof(int)) depend(sink : i-0, j+sizeof(int))
395 #pragma omp ordered depend(sink : i-0, j+sizeof(int)) depend(source) // expected-error {{'depend(source)' clause cannot be mixed with 'depend(sink:vec)' clauses}}
396 #pragma omp ordered depend(source) depend(sink : i-0, j+sizeof(int)) // expected-error {{'depend(sink:vec)' clauses cannot be mixed with 'depend(source)' clause}}
401 #pragma omp for ordered(2) // expected-note {{as specified in 'ordered' clause}}
402 for (int i
= 0; i
< 10; ++i
) { // expected-error {{expected 2 for loops after '#pragma omp for', but found only 1}}
403 #if _OPENMP >= 202111
404 #pragma omp ordered doacross(sink : i)
405 #pragma omp ordered depend(source) // expected-warning {{'depend' clause for 'ordered' is deprecated; use 'doacross' instead}}
407 #pragma omp ordered doacross(sink : i, j) // omp52-error {{expected loop iteration variable}}
409 #pragma omp ordered depend(sink : i)
411 #pragma omp ordered depend(sink : i, j) // expected-error {{expected loop iteration variable}}
416 return foo
<int>(); // expected-note {{in instantiation of function template specialization 'foo<int>' requested here}}