418 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -o - %s -Wuninitialized2// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -std=c++98 -o - %s -Wuninitialized3// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -std=c++11 -o - %s -Wuninitialized4// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp -fopenmp-version=52 -ferror-limit 100 -o - %s -Wuninitialized5 6// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 -o - %s -Wuninitialized7// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 -std=c++98 -o - %s -Wuninitialized8// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 -std=c++11 -o - %s -Wuninitialized9 10void xxx(int argc) {11 int x; // expected-note {{initialize the variable 'x' to silence this warning}}12#pragma omp for ordered13 for (int i = 0; i < 10; ++i) {14#pragma omp ordered15 argc = x; // expected-warning {{variable 'x' is uninitialized when used here}}16 }17}18 19int foo();20#if __cplusplus >= 201103L21// expected-note@-2 {{declared here}}22#endif23 24template <class T>25T foo() {26 T k;27 #pragma omp for ordered28 for (int i = 0; i < 10; ++i) {29 L1:30 foo();31 #pragma omp ordered32 {33 foo();34 goto L1; // expected-error {{use of undeclared label 'L1'}}35 }36 }37 #pragma omp for ordered38 for (int i = 0; i < 10; ++i) {39 foo();40 goto L2; // expected-error {{use of undeclared label 'L2'}}41 #pragma omp ordered42 {43 L2:44 foo();45 }46 }47 #pragma omp for ordered48 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}}50 {51 foo();52 }53 }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}}57 {58 foo();59 }60 }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}}64 {65 foo();66 }67 }68 #pragma omp for ordered69 for (int i = 0; i < 10; ++i) {70 #pragma omp ordered // expected-note {{previous 'ordered' directive used here}}71 {72 foo();73 }74 #pragma omp ordered // expected-error {{exactly one 'ordered' directive must appear in the loop body of an enclosing directive}}75 {76 foo();77 }78 }79 #pragma omp ordered simd simd // expected-error {{directive '#pragma omp ordered' cannot contain more than one 'simd' clause}}80 {81 foo();82 }83 #pragma omp simd84 for (int i = 0; i < 10; ++i) {85 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}86 {87 foo();88 }89 }90 #pragma omp simd91 for (int i = 0; i < 10; ++i) {92 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}93 {94 foo();95 }96 }97 #pragma omp simd98 for (int i = 0; i < 10; ++i) {99#pragma omp ordered simd // expected-note {{previous 'ordered' directive used here}}100 {101 foo();102 }103#pragma omp ordered simd // expected-error {{exactly one 'ordered' directive must appear in the loop body of an enclosing directive}}104 {105 foo();106 }107 }108#pragma omp for simd109 for (int i = 0; i < 10; ++i) {110 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}111 {112 foo();113 }114 }115 #pragma omp for simd116 for (int i = 0; i < 10; ++i) {117 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}118 {119 foo();120 }121 }122 #pragma omp parallel for simd123 for (int i = 0; i < 10; ++i) {124 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}125 {126 foo();127 }128 }129 #pragma omp parallel for simd130 for (int i = 0; i < 10; ++i) {131 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}132 {133 foo();134 }135#if _OPENMP >= 202111136 #pragma omp ordered doacross(source:omp_cur_iteration) // expected-error {{OpenMP constructs may not be nested inside a simd region}}137#else138 #pragma omp ordered depend(source) // expected-error {{OpenMP constructs may not be nested inside a simd region}}139#endif140 }141#pragma omp parallel for ordered142 for (int i = 0; i < 10; ++i) {143#if _OPENMP >= 202111144 #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}}146#else147 #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}}149#endif150 }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 >= 202111155#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:)167 if (i == j)168#pragma omp ordered doacross(source:) // omp52-error {{'#pragma omp ordered' with 'doacross' clause cannot be an immediate substatement}}169 ;170 if (i == j)171#pragma omp ordered doacross(sink : i, j) // omp52-error {{'#pragma omp ordered' with 'doacross' clause cannot be an immediate substatement}}172 ;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 >= 201103L182// omp52-note@-2 {{non-constexpr function 'foo' cannot be used in a constant expression}}183#endif184#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}}188#else189#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)197 if (i == j)198#pragma omp ordered depend(source) // expected-error {{'#pragma omp ordered' with 'depend' clause cannot be an immediate substatement}}199 ;200 if (i == j)201#pragma omp ordered depend(sink : i, j) // expected-error {{'#pragma omp ordered' with 'depend' clause cannot be an immediate substatement}}202 ;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 >= 201103L212// expected-note@-2 {{non-constexpr function 'foo' cannot be used in a constant expression}}213#endif214#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}}218#endif219 }220 }221#if _OPENMP >= 202111222#else223#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}}225#endif226 return T();227}228 229int foo() {230#if __cplusplus >= 201103L231// expected-note@-2 {{declared here}}232#endif233int k;234 #pragma omp for ordered235 for (int i = 0; i < 10; ++i) {236 L1:237 foo();238 #pragma omp ordered239 {240 foo();241 goto L1; // expected-error {{use of undeclared label 'L1'}}242 }243 }244 #pragma omp for ordered245 for (int i = 0; i < 10; ++i) {246 foo();247 goto L2; // expected-error {{use of undeclared label 'L2'}}248 #pragma omp ordered249 {250 L2:251 foo();252 }253 }254 #pragma omp for ordered255 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}}257 {258 foo();259 }260 }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}}264 {265 foo();266 }267 }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}}271 {272 foo();273 }274 }275 #pragma omp ordered simd simd // expected-error {{directive '#pragma omp ordered' cannot contain more than one 'simd' clause}}276 {277 foo();278 }279 #pragma omp simd280 for (int i = 0; i < 10; ++i) {281 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}282 {283 foo();284 }285 }286 #pragma omp simd287 for (int i = 0; i < 10; ++i) {288 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}289 {290 foo();291 }292 }293 #pragma omp for simd294 for (int i = 0; i < 10; ++i) {295 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}296 {297 foo();298 }299 }300 #pragma omp for simd301 for (int i = 0; i < 10; ++i) {302 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}303 {304 foo();305 }306 }307 #pragma omp parallel for simd308 for (int i = 0; i < 10; ++i) {309 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}310 {311 foo();312 }313 }314 #pragma omp parallel for simd315 for (int i = 0; i < 10; ++i) {316 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}317 {318 foo();319 }320#if _OPENMP >= 202111321 #pragma omp ordered doacross(source:omp_cur_iteration) // expected-error {{OpenMP constructs may not be nested inside a simd region}}322#else323 #pragma omp ordered depend(source) // expected-error {{OpenMP constructs may not be nested inside a simd region}}324#endif325 }326#pragma omp parallel for ordered327 for (int i = 0; i < 10; ++i) {328#if _OPENMP >= 202111329#else330 #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}}332#endif333 }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 >= 202111338#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:)346 if (i == j)347#pragma omp ordered doacross(source:) // omp52-error {{'#pragma omp ordered' with 'doacross' clause cannot be an immediate substatement}}348 ;349 if (i == j)350#pragma omp ordered doacross(sink : i, j) // omp52-error {{'#pragma omp ordered' with 'doacross' clause cannot be an immediate substatement}}351 ;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 >= 201103L361// omp52-note@-2 {{non-constexpr function 'foo' cannot be used in a constant expression}}362#endif363#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}}367#else368#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)376 if (i == j)377#pragma omp ordered depend(source) // expected-error {{'#pragma omp ordered' with 'depend' clause cannot be an immediate substatement}}378 ;379 if (i == j)380#pragma omp ordered depend(sink : i, j) // expected-error {{'#pragma omp ordered' with 'depend' clause cannot be an immediate substatement}}381 ;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 >= 201103L391// expected-note@-2 {{non-constexpr function 'foo' cannot be used in a constant expression}}392#endif393#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}}397#endif398 }399 }400 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 >= 202111404#pragma omp ordered doacross(sink : i)405#pragma omp ordered depend(source) // expected-warning {{'depend' clause for 'ordered' is deprecated; use 'doacross' instead}}406 int j;407#pragma omp ordered doacross(sink : i, j) // omp52-error {{expected loop iteration variable}}408#else409#pragma omp ordered depend(sink : i)410 int j;411#pragma omp ordered depend(sink : i, j) // expected-error {{expected loop iteration variable}}412#endif413 foo();414 }415 416 return foo<int>(); // expected-note {{in instantiation of function template specialization 'foo<int>' requested here}}417}418