brintos

brintos / llvm-project-archived public Read only

0
0
Text · 25.2 KiB · fb79b07 Raw
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