brintos

brintos / llvm-project-archived public Read only

0
0
Text · 39.2 KiB · 270e17d Raw
1234 lines · c
1// RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -verify=expected,omp45 %s -Wuninitialized2// RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=50 -verify=expected,omp50,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized3// RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=60 -verify=expected,omp60,omp-clause,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized4// RUN: %clang_cc1 -fsyntax-only -fopenmp -verify=expected,omp51,omp-clause,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized5 6// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=45 -verify=expected,omp45 %s -Wuninitialized7// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=50 -verify=expected,omp50,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized8// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=60 -verify=expected,omp60,omp-clause,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized9// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify=expected,omp51,omp-clause,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized10 11void xxx(int argc) {12  // expected-note@+1 {{initialize the variable 'x' to silence this warning}}13  int x;14#pragma omp distribute simd15  for (int i = 0; i < 10; ++i)16    // expected-warning@+1 {{variable 'x' is uninitialized when used here}}17    argc = x;18}19 20// expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute simd'}}21#pragma omp distribute simd22 23// expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute simd'}}24#pragma omp distribute simd foo25 26// expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute simd'}}27#pragma omp distribute simd safelen(4)28 29void test_no_clause(void) {30  int i;31#pragma omp target32#pragma omp teams33#pragma omp distribute simd34  for (i = 0; i < 16; ++i)35    ;36 37#pragma omp target38#pragma omp teams39// expected-error@+2 {{statement after '#pragma omp distribute simd' must be a for loop}}40#pragma omp distribute simd41  ++i;42}43 44void test_branch_protected_scope(void) {45  int i = 0;46L1:47  ++i;48 49  int x[24];50 51#pragma omp target52#pragma omp teams53#pragma omp distribute simd54  for (i = 0; i < 16; ++i) {55    if (i == 5)56      // expected-error@+1 {{use of undeclared label 'L1'}}57      goto L1;58    else if (i == 6)59      // expected-error@+1 {{cannot return from OpenMP region}}60      return;61    else if (i == 7)62      goto L2;63    else if (i == 8) {64    L2:65      x[i]++;66    }67  }68 69  if (x[0] == 0)70    // expected-error@+1 {{use of undeclared label 'L2'}}71    goto L2;72  else if (x[1] == 1)73    goto L1;74}75 76void test_invalid_clause(void) {77  int i;78#pragma omp target79#pragma omp teams80// expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}81#pragma omp distribute simd foo bar82  for (i = 0; i < 16; ++i)83    ;84}85 86void test_non_identifiers(void) {87  int i, x;88 89#pragma omp target90#pragma omp teams91// expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}92#pragma omp distribute simd;93  for (i = 0; i < 16; ++i)94    ;95 96#pragma omp target97#pragma omp teams98// expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}99#pragma omp distribute simd private(x);100  for (i = 0; i < 16; ++i)101    ;102 103#pragma omp target104#pragma omp teams105// expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}106#pragma omp distribute simd, private(x);107  for (i = 0; i < 16; ++i)108    ;109}110 111extern int foo(void);112void test_safelen(void) {113  int i;114#pragma omp target115#pragma omp teams116// expected-error@+1 {{expected '('}}117#pragma omp distribute simd safelen118  for (i = 0; i < 16; ++i)119    ;120#pragma omp target121#pragma omp teams122// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}123#pragma omp distribute simd safelen(124  for (i = 0; i < 16; ++i)125    ;126#pragma omp target127#pragma omp teams128// expected-error@+1 {{expected expression}}129#pragma omp distribute simd safelen()130  for (i = 0; i < 16; ++i)131    ;132#pragma omp target133#pragma omp teams134// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}135#pragma omp distribute simd safelen(,136  for (i = 0; i < 16; ++i)137    ;138#pragma omp target139#pragma omp teams140// expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}141#pragma omp distribute simd safelen(, )142  for (i = 0; i < 16; ++i)143    ;144#pragma omp target145#pragma omp teams146// expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}147// expected-error@+1 {{expected '('}}148#pragma omp distribute simd safelen 4)149  for (i = 0; i < 16; ++i)150    ;151#pragma omp target152#pragma omp teams153// expected-error@+2 {{expected ')'}}154// expected-note@+1 {{to match this '('}}155#pragma omp distribute simd safelen(4156  for (i = 0; i < 16; ++i)157    ;158#pragma omp target159#pragma omp teams160// expected-error@+2 {{expected ')'}}161// expected-note@+1 {{to match this '('}}162#pragma omp distribute simd safelen(4,163  for (i = 0; i < 16; ++i)164    ;165#pragma omp target166#pragma omp teams167// expected-error@+2 {{expected ')'}}168// expected-note@+1 {{to match this '('}}169#pragma omp distribute simd safelen(4, )170  for (i = 0; i < 16; ++i)171    ;172#pragma omp target173#pragma omp teams174// xxpected-error@+1 {{expected expression}}175#pragma omp distribute simd safelen(4)176  for (i = 0; i < 16; ++i)177    ;178#pragma omp target179#pragma omp teams180// expected-error@+2 {{expected ')'}}181// expected-note@+1 {{to match this '('}}182#pragma omp distribute simd safelen(4 4)183  for (i = 0; i < 16; ++i)184    ;185#pragma omp target186#pragma omp teams187// expected-error@+2 {{expected ')'}}188// expected-note@+1 {{to match this '('}}189#pragma omp distribute simd safelen(4, , 4)190  for (i = 0; i < 16; ++i)191    ;192#pragma omp target193#pragma omp teams194#pragma omp distribute simd safelen(4)195  for (i = 0; i < 16; ++i)196    ;197#pragma omp target198#pragma omp teams199// expected-error@+2 {{expected ')'}}200// expected-note@+1 {{to match this '('}}201#pragma omp distribute simd safelen(4, 8)202  for (i = 0; i < 16; ++i)203    ;204#pragma omp target205#pragma omp teams206// expected-error@+1 {{integer constant expression}}207#pragma omp distribute simd safelen(2.5)208  for (i = 0; i < 16; ++i)209    ;210#pragma omp target211#pragma omp teams212// expected-error@+1 {{integer constant expression}}213#pragma omp distribute simd safelen(foo())214  for (i = 0; i < 16; ++i)215    ;216#pragma omp target217#pragma omp teams218// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}219#pragma omp distribute simd safelen(-5)220  for (i = 0; i < 16; ++i)221    ;222#pragma omp target223#pragma omp teams224// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}225#pragma omp distribute simd safelen(0)226  for (i = 0; i < 16; ++i)227    ;228#pragma omp target229#pragma omp teams230// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}231#pragma omp distribute simd safelen(5 - 5)232  for (i = 0; i < 16; ++i)233    ;234}235 236void test_simdlen(void) {237  int i;238#pragma omp target239#pragma omp teams240// expected-error@+1 {{expected '('}}241#pragma omp distribute simd simdlen242  for (i = 0; i < 16; ++i)243    ;244#pragma omp target245#pragma omp teams246// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}247#pragma omp distribute simd simdlen(248  for (i = 0; i < 16; ++i)249    ;250#pragma omp target251#pragma omp teams252// expected-error@+1 {{expected expression}}253#pragma omp distribute simd simdlen()254  for (i = 0; i < 16; ++i)255    ;256#pragma omp target257#pragma omp teams258// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}259#pragma omp distribute simd simdlen(,260  for (i = 0; i < 16; ++i)261    ;262#pragma omp target263#pragma omp teams264// expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}265#pragma omp distribute simd simdlen(, )266  for (i = 0; i < 16; ++i)267    ;268#pragma omp target269#pragma omp teams270// expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}271// expected-error@+1 {{expected '('}}272#pragma omp distribute simd simdlen 4)273  for (i = 0; i < 16; ++i)274    ;275#pragma omp target276#pragma omp teams277// expected-error@+2 {{expected ')'}}278// expected-note@+1 {{to match this '('}}279#pragma omp distribute simd simdlen(4280  for (i = 0; i < 16; ++i)281    ;282#pragma omp target283#pragma omp teams284// expected-error@+2 {{expected ')'}}285// expected-note@+1 {{to match this '('}}286#pragma omp distribute simd simdlen(4,287  for (i = 0; i < 16; ++i)288    ;289#pragma omp target290#pragma omp teams291// expected-error@+2 {{expected ')'}}292// expected-note@+1 {{to match this '('}}293#pragma omp distribute simd simdlen(4, )294  for (i = 0; i < 16; ++i)295    ;296#pragma omp target297#pragma omp teams298#pragma omp distribute simd simdlen(4)299  for (i = 0; i < 16; ++i)300    ;301#pragma omp target302#pragma omp teams303// expected-error@+2 {{expected ')'}}304// expected-note@+1 {{to match this '('}}305#pragma omp distribute simd simdlen(4 4)306  for (i = 0; i < 16; ++i)307    ;308#pragma omp target309#pragma omp teams310// expected-error@+2 {{expected ')'}}311// expected-note@+1 {{to match this '('}}312#pragma omp distribute simd simdlen(4, , 4)313  for (i = 0; i < 16; ++i)314    ;315#pragma omp target316#pragma omp teams317#pragma omp distribute simd simdlen(4)318  for (i = 0; i < 16; ++i)319    ;320#pragma omp target321#pragma omp teams322// expected-error@+2 {{expected ')'}}323// expected-note@+1 {{to match this '('}}324#pragma omp distribute simd simdlen(4, 8)325  for (i = 0; i < 16; ++i)326    ;327#pragma omp target328#pragma omp teams329// expected-error@+1 {{integer constant expression}}330#pragma omp distribute simd simdlen(2.5)331  for (i = 0; i < 16; ++i)332    ;333#pragma omp target334#pragma omp teams335// expected-error@+1 {{integer constant expression}}336#pragma omp distribute simd simdlen(foo())337  for (i = 0; i < 16; ++i)338    ;339#pragma omp target340#pragma omp teams341// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}342#pragma omp distribute simd simdlen(-5)343  for (i = 0; i < 16; ++i)344    ;345#pragma omp target346#pragma omp teams347// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}348#pragma omp distribute simd simdlen(0)349  for (i = 0; i < 16; ++i)350    ;351#pragma omp target352#pragma omp teams353// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}354#pragma omp distribute simd simdlen(5 - 5)355  for (i = 0; i < 16; ++i)356    ;357}358 359void test_safelen_simdlen(void) {360  int i;361#pragma omp target362#pragma omp teams363// expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}364#pragma omp distribute simd simdlen(6) safelen(5)365  for (i = 0; i < 16; ++i)366    ;367 368#pragma omp target369#pragma omp teams370// expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}371#pragma omp distribute simd safelen(5) simdlen(6)372  for (i = 0; i < 16; ++i)373    ;374}375 376void test_collapse(void) {377  int i;378#pragma omp target379#pragma omp teams380// expected-error@+1 {{expected '('}}381#pragma omp distribute simd collapse382  for (i = 0; i < 16; ++i)383    ;384#pragma omp target385#pragma omp teams386// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}387#pragma omp distribute simd collapse(388  for (i = 0; i < 16; ++i)389    ;390#pragma omp target391#pragma omp teams392// expected-error@+1 {{expected expression}}393#pragma omp distribute simd collapse()394  for (i = 0; i < 16; ++i)395    ;396#pragma omp target397#pragma omp teams398// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}399#pragma omp distribute simd collapse(,400  for (i = 0; i < 16; ++i)401    ;402#pragma omp target403#pragma omp teams404// expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}405#pragma omp distribute simd collapse(, )406  for (i = 0; i < 16; ++i)407    ;408#pragma omp target409#pragma omp teams410// expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}411// expected-error@+1 {{expected '('}}412#pragma omp distribute simd collapse 4)413  for (i = 0; i < 16; ++i)414    ;415#pragma omp target416#pragma omp teams417// expected-error@+2 {{expected ')'}}418// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}419#pragma omp distribute simd collapse(4420  for (i = 0; i < 16; ++i)421// expected-error@+1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}422    ;423#pragma omp target424#pragma omp teams425// expected-error@+2 {{expected ')'}}426// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}427#pragma omp distribute simd collapse(4,428  for (i = 0; i < 16; ++i)429// expected-error@+1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}430    ;431#pragma omp target432#pragma omp teams433// expected-error@+2 {{expected ')'}}434// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}435#pragma omp distribute simd collapse(4, )436  for (i = 0; i < 16; ++i)437// expected-error@+1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}438    ;439#pragma omp target440#pragma omp teams441// expected-note@+1 {{as specified in 'collapse' clause}}442#pragma omp distribute simd collapse(4)443  for (i = 0; i < 16; ++i)444// expected-error@+1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}445    ;446#pragma omp target447#pragma omp teams448// expected-error@+3 {{expected ')'}}449// expected-note@+2 {{to match this '('}}450// expected-note@+1 {{as specified in 'collapse' clause}}451#pragma omp distribute simd collapse(4 4)452  for (i = 0; i < 16; ++i)453// expected-error@+1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}454    ;455#pragma omp target456#pragma omp teams457// expected-error@+3 {{expected ')'}}458// expected-note@+2 {{to match this '('}}459// expected-note@+1 {{as specified in 'collapse' clause}}460#pragma omp distribute simd collapse(4, , 4)461  for (i = 0; i < 16; ++i)462// expected-error@+1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}463    ;464#pragma omp target465#pragma omp teams466#pragma omp distribute simd collapse(4)467  for (int i1 = 0; i1 < 16; ++i1)468    for (int i2 = 0; i2 < 16; ++i2)469      for (int i3 = 0; i3 < 16; ++i3)470        for (int i4 = 0; i4 < 16; ++i4)471          foo();472#pragma omp target473#pragma omp teams474// expected-error@+3 {{expected ')'}}475// expected-note@+2 {{to match this '('}}476// expected-note@+1 {{as specified in 'collapse' clause}}477#pragma omp distribute simd collapse(4, 8)478  for (i = 0; i < 16; ++i)479// expected-error@+1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}480    ;481#pragma omp target482#pragma omp teams483// expected-error@+1 {{integer constant expression}}484#pragma omp distribute simd collapse(2.5)485  for (i = 0; i < 16; ++i)486    ;487#pragma omp target488#pragma omp teams489// expected-error@+1 {{integer constant expression}}490#pragma omp distribute simd collapse(foo())491  for (i = 0; i < 16; ++i)492    ;493#pragma omp target494#pragma omp teams495// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}496#pragma omp distribute simd collapse(-5)497  for (i = 0; i < 16; ++i)498    ;499#pragma omp target500#pragma omp teams501// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}502#pragma omp distribute simd collapse(0)503  for (i = 0; i < 16; ++i)504    ;505#pragma omp target506#pragma omp teams507// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}508#pragma omp distribute simd collapse(5 - 5)509  for (i = 0; i < 16; ++i)510    ;511#if defined(_OPENMP) && (_OPENMP <= 202111)512// expected-note@+3 2 {{defined as reduction}}513#pragma omp target514#pragma omp teams515#pragma omp distribute simd collapse(2) reduction(+ : i)516  for (i = 0; i < 16; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp distribute simd' directive may not be reduction, predetermined as lastprivate}}517    // expected-note@+1 {{variable with automatic storage duration is predetermined as private; perhaps you forget to enclose 'omp for' directive into a parallel or another task region?}}518    for (int j = 0; j < 16; ++j)519// expected-error@+2 2 {{reduction variable must be shared}}520// expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}}521#pragma omp for reduction(+ : i, j)522      for (int k = 0; k < 16; ++k)523        i += j;524#endif525#pragma omp target526#pragma omp teams527  for (i = 0; i < 16; ++i)528    for (int j = 0; j < 16; ++j)529#pragma omp distribute simd reduction(+ : i, j)530      for (int k = 0; k < 16; ++k)531        i += j;532}533 534void test_linear(void) {535  int i;536#pragma omp target537#pragma omp teams538// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}539#pragma omp distribute simd linear(540  for (i = 0; i < 16; ++i)541    ;542#pragma omp target543#pragma omp teams544// expected-error@+2 {{expected expression}}545// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}546#pragma omp distribute simd linear(,547  for (i = 0; i < 16; ++i)548    ;549#pragma omp target550#pragma omp teams551// expected-error@+2 {{expected expression}}552// expected-error@+1 {{expected expression}}553#pragma omp distribute simd linear(, )554  for (i = 0; i < 16; ++i)555    ;556#pragma omp target557#pragma omp teams558// expected-error@+1 {{expected expression}}559#pragma omp distribute simd linear()560  for (i = 0; i < 16; ++i)561    ;562#pragma omp target563#pragma omp teams564// expected-error@+1 {{expected expression}}565#pragma omp distribute simd linear(int)566  for (i = 0; i < 16; ++i)567    ;568#pragma omp target569#pragma omp teams570// expected-error@+1 {{expected variable name}}571#pragma omp distribute simd linear(0)572  for (i = 0; i < 16; ++i)573    ;574#pragma omp target575#pragma omp teams576// expected-error@+1 {{use of undeclared identifier 'x'}}577#pragma omp distribute simd linear(x)578  for (i = 0; i < 16; ++i)579    ;580#pragma omp target581#pragma omp teams582// expected-error@+2 {{use of undeclared identifier 'x'}}583// expected-error@+1 {{use of undeclared identifier 'y'}}584#pragma omp distribute simd linear(x, y)585  for (i = 0; i < 16; ++i)586    ;587#pragma omp target588#pragma omp teams589// expected-error@+3 {{use of undeclared identifier 'x'}}590// expected-error@+2 {{use of undeclared identifier 'y'}}591// expected-error@+1 {{use of undeclared identifier 'z'}}592#pragma omp distribute simd linear(x, y, z)593  for (i = 0; i < 16; ++i)594    ;595}596 597void test_aligned(void) {598  int i;599#pragma omp target600#pragma omp teams601// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}602#pragma omp distribute simd aligned(603  for (i = 0; i < 16; ++i)604    ;605#pragma omp target606#pragma omp teams607// expected-error@+2 {{expected expression}}608// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}609#pragma omp distribute simd aligned(,610  for (i = 0; i < 16; ++i)611    ;612#pragma omp target613#pragma omp teams614// expected-error@+2 {{expected expression}}615// expected-error@+1 {{expected expression}}616#pragma omp distribute simd aligned(, )617  for (i = 0; i < 16; ++i)618    ;619#pragma omp target620#pragma omp teams621// expected-error@+1 {{expected expression}}622#pragma omp distribute simd aligned()623  for (i = 0; i < 16; ++i)624    ;625#pragma omp target626#pragma omp teams627// expected-error@+1 {{expected expression}}628#pragma omp distribute simd aligned(int)629  for (i = 0; i < 16; ++i)630    ;631#pragma omp target632#pragma omp teams633// expected-error@+1 {{expected variable name}}634#pragma omp distribute simd aligned(0)635  for (i = 0; i < 16; ++i)636    ;637#pragma omp target638#pragma omp teams639// expected-error@+1 {{use of undeclared identifier 'x'}}640#pragma omp distribute simd aligned(x)641  for (i = 0; i < 16; ++i)642    ;643#pragma omp target644#pragma omp teams645// expected-error@+2 {{use of undeclared identifier 'x'}}646// expected-error@+1 {{use of undeclared identifier 'y'}}647#pragma omp distribute simd aligned(x, y)648  for (i = 0; i < 16; ++i)649    ;650#pragma omp target651#pragma omp teams652// expected-error@+3 {{use of undeclared identifier 'x'}}653// expected-error@+2 {{use of undeclared identifier 'y'}}654// expected-error@+1 {{use of undeclared identifier 'z'}}655#pragma omp distribute simd aligned(x, y, z)656  for (i = 0; i < 16; ++i)657    ;658 659  int *x, y, z[25]; // expected-note 4 {{'y' defined here}}660#pragma omp target661#pragma omp teams662#pragma omp distribute simd aligned(x)663  for (i = 0; i < 16; ++i)664    ;665#pragma omp target666#pragma omp teams667#pragma omp distribute simd aligned(z)668  for (i = 0; i < 16; ++i)669    ;670#pragma omp target671#pragma omp teams672// expected-error@+1 {{expected expression}}673#pragma omp distribute simd aligned(x :)674  for (i = 0; i < 16; ++i)675    ;676#pragma omp target677#pragma omp teams678// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}679#pragma omp distribute simd aligned(x :, )680  for (i = 0; i < 16; ++i)681    ;682#pragma omp target683#pragma omp teams684#pragma omp distribute simd aligned(x : 1)685  for (i = 0; i < 16; ++i)686    ;687#pragma omp target688#pragma omp teams689#pragma omp distribute simd aligned(x : 2 * 2)690  for (i = 0; i < 16; ++i)691    ;692#pragma omp target693#pragma omp teams694// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}695#pragma omp distribute simd aligned(x : 1, y)696  for (i = 0; i < 16; ++i)697    ;698#pragma omp target699#pragma omp teams700// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}701#pragma omp distribute simd aligned(x : 1, y, z : 1)702  for (i = 0; i < 16; ++i)703    ;704 705#pragma omp target706#pragma omp teams707// expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}708#pragma omp distribute simd aligned(x, y)709  for (i = 0; i < 16; ++i)710    ;711#pragma omp target712#pragma omp teams713// expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}714#pragma omp distribute simd aligned(x, y, z)715  for (i = 0; i < 16; ++i)716    ;717 718#pragma omp target719#pragma omp teams720// expected-note@+2 {{defined as aligned}}721// expected-error@+1 {{a variable cannot appear in more than one aligned clause}}722#pragma omp distribute simd aligned(x) aligned(z, x)723  for (i = 0; i < 16; ++i)724    ;725 726#pragma omp target727#pragma omp teams728// expected-note@+3 {{defined as aligned}}729// expected-error@+2 {{a variable cannot appear in more than one aligned clause}}730// expected-error@+1 2 {{argument of aligned clause should be array or pointer, not 'int'}}731#pragma omp distribute simd aligned(x, y, z) aligned(y, z)732  for (i = 0; i < 16; ++i)733    ;734}735 736void test_private(void) {737  int i;738#pragma omp target739#pragma omp teams740// expected-error@+3 {{expected expression}}741// expected-error@+2 {{expected ')'}}742// expected-note@+1 {{to match this '('}}743#pragma omp distribute simd private(744  for (i = 0; i < 16; ++i)745    ;746#pragma omp target747#pragma omp teams748// expected-error@+3 {{expected ')'}}749//  expected-note@+2 {{to match this '('}}750// expected-error@+1 2 {{expected expression}}751#pragma omp distribute simd private(,752  for (i = 0; i < 16; ++i)753    ;754#pragma omp target755#pragma omp teams756// expected-error@+1 2 {{expected expression}}757#pragma omp distribute simd private(, )758  for (i = 0; i < 16; ++i)759    ;760#pragma omp target761#pragma omp teams762// expected-error@+1 {{expected expression}}763#pragma omp distribute simd private()764  for (i = 0; i < 16; ++i)765    ;766#pragma omp target767#pragma omp teams768// expected-error@+1 {{expected expression}}769#pragma omp distribute simd private(int)770  for (i = 0; i < 16; ++i)771    ;772#pragma omp target773#pragma omp teams774// expected-error@+1 {{expected variable name}}775#pragma omp distribute simd private(0)776  for (i = 0; i < 16; ++i)777    ;778 779  int x, y, z;780#pragma omp target781#pragma omp teams782#pragma omp distribute simd private(x)783  for (i = 0; i < 16; ++i)784    ;785#pragma omp target786#pragma omp teams787#pragma omp distribute simd private(x, y)788  for (i = 0; i < 16; ++i)789    ;790#pragma omp target791#pragma omp teams792#pragma omp distribute simd private(x, y, z)793  for (i = 0; i < 16; ++i) {794    x = y * i + z;795  }796}797 798void test_firstprivate(void) {799  int i;800#pragma omp target801#pragma omp teams802// expected-error@+3 {{expected ')'}}803//  expected-note@+2 {{to match this '('}}804// expected-error@+1 {{expected expression}}805#pragma omp distribute simd firstprivate(806  for (i = 0; i < 16; ++i)807    ;808}809 810void test_lastprivate(void) {811  int i;812#pragma omp target813#pragma omp teams814// expected-error@+3 {{expected ')'}}815// expected-note@+2 {{to match this '('}}816// expected-error@+1 {{expected expression}}817#pragma omp distribute simd lastprivate(818  for (i = 0; i < 16; ++i)819    ;820 821#pragma omp target822#pragma omp teams823// expected-error@+3 {{expected ')'}}824// expected-note@+2 {{to match this '('}}825// expected-error@+1 2 {{expected expression}}826#pragma omp distribute simd lastprivate(,827  for (i = 0; i < 16; ++i)828    ;829#pragma omp target830#pragma omp teams831// expected-error@+1 2 {{expected expression}}832#pragma omp distribute simd lastprivate(, )833  for (i = 0; i < 16; ++i)834    ;835#pragma omp target836#pragma omp teams837// expected-error@+1 {{expected expression}}838#pragma omp distribute simd lastprivate()839  for (i = 0; i < 16; ++i)840    ;841#pragma omp target842#pragma omp teams843// expected-error@+1 {{expected expression}}844#pragma omp distribute simd lastprivate(int)845  for (i = 0; i < 16; ++i)846    ;847#pragma omp target848#pragma omp teams849// expected-error@+1 {{expected variable name}}850#pragma omp distribute simd lastprivate(0)851  for (i = 0; i < 16; ++i)852    ;853 854  int x, y, z;855#pragma omp target856#pragma omp teams857#pragma omp distribute simd lastprivate(x)858  for (i = 0; i < 16; ++i)859    ;860#pragma omp target861#pragma omp teams862#pragma omp distribute simd lastprivate(x, y)863  for (i = 0; i < 16; ++i)864    ;865#pragma omp target866#pragma omp teams867#pragma omp distribute simd lastprivate(x, y, z)868  for (i = 0; i < 16; ++i)869    ;870}871 872void test_reduction(void) {873  int i, x, y;874#pragma omp target875#pragma omp teams876// expected-error@+4 {{expected ')'}}877// expected-note@+3 {{to match this '('}}878// expected-error@+2 {{expected identifier}}879// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}880#pragma omp distribute simd reduction(881  for (i = 0; i < 16; ++i)882    ;883#pragma omp target884#pragma omp teams885// expected-error@+2 {{expected identifier}}886// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}887#pragma omp distribute simd reduction()888  for (i = 0; i < 16; ++i)889    ;890#pragma omp target891#pragma omp teams892// expected-error@+2 {{expected expression}}893// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}894#pragma omp distribute simd reduction(x)895  for (i = 0; i < 16; ++i)896    ;897#pragma omp target898#pragma omp teams899// expected-error@+1 {{expected identifier}}900#pragma omp distribute simd reduction( : x)901  for (i = 0; i < 16; ++i)902    ;903#pragma omp target904#pragma omp teams905// expected-error@+4 {{expected ')'}}906// expected-note@+3 {{to match this '('}}907// expected-error@+2 {{expected identifier}}908// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}909#pragma omp distribute simd reduction(,910  for (i = 0; i < 16; ++i)911    ;912#pragma omp target913#pragma omp teams914// expected-error@+4 {{expected ')'}}915// expected-note@+3 {{to match this '('}}916// expected-error@+2 {{expected expression}}917// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}918#pragma omp distribute simd reduction(+919  for (i = 0; i < 16; ++i)920    ;921 922#pragma omp target923#pragma omp teams924// expected-error@+3 {{expected ')'}}925//  expected-note@+2 {{to match this '('}}926// expected-error@+1 {{expected expression}}927#pragma omp distribute simd reduction(+:928  for (i = 0; i < 16; ++i)929    ;930#pragma omp target931#pragma omp teams932// expected-error@+1 {{expected expression}}933#pragma omp distribute simd reduction(+ :)934  for (i = 0; i < 16; ++i)935    ;936#pragma omp target937#pragma omp teams938// expected-error@+1 {{expected expression}}939#pragma omp distribute simd reduction(+ :, y)940  for (i = 0; i < 16; ++i)941    ;942#pragma omp target943#pragma omp teams944// expected-error@+1 {{expected expression}}945#pragma omp distribute simd reduction(+ : x, + : y)946  for (i = 0; i < 16; ++i)947    ;948#pragma omp target949#pragma omp teams950// expected-error@+1 {{expected identifier}}951#pragma omp distribute simd reduction(% : x)952  for (i = 0; i < 16; ++i)953    ;954 955#pragma omp target956#pragma omp teams957#pragma omp distribute simd reduction(+ : x)958  for (i = 0; i < 16; ++i)959    ;960#pragma omp target961#pragma omp teams962#pragma omp distribute simd reduction(* : x)963  for (i = 0; i < 16; ++i)964    ;965#pragma omp target966#pragma omp teams967  // omp60-error@+1 {{incorrect reduction identifier, expected one of '+', '*', '&', '|', '^', '&&', '||', 'min' or 'max' or declare reduction for type 'int'}}968#pragma omp distribute simd reduction(- : x)969  for (i = 0; i < 16; ++i)970    ;971#pragma omp target972#pragma omp teams973#pragma omp distribute simd reduction(& : x)974  for (i = 0; i < 16; ++i)975    ;976#pragma omp target977#pragma omp teams978#pragma omp distribute simd reduction(| : x)979  for (i = 0; i < 16; ++i)980    ;981#pragma omp target982#pragma omp teams983#pragma omp distribute simd reduction(^ : x)984  for (i = 0; i < 16; ++i)985    ;986#pragma omp target987#pragma omp teams988#pragma omp distribute simd reduction(&& : x)989  for (i = 0; i < 16; ++i)990    ;991#pragma omp target992#pragma omp teams993#pragma omp distribute simd reduction(|| : x)994  for (i = 0; i < 16; ++i)995    ;996#pragma omp target997#pragma omp teams998#pragma omp distribute simd reduction(max : x)999  for (i = 0; i < 16; ++i)1000    ;1001#pragma omp target1002#pragma omp teams1003#pragma omp distribute simd reduction(min : x)1004  for (i = 0; i < 16; ++i)1005    ;1006  struct X {1007    int x;1008  };1009  struct X X;1010#pragma omp target1011#pragma omp teams1012// expected-error@+1 {{expected variable name}}1013#pragma omp distribute simd reduction(+ : X.x)1014  for (i = 0; i < 16; ++i)1015    ;1016#pragma omp target1017#pragma omp teams1018// expected-error@+1 {{expected variable name}}1019#pragma omp distribute simd reduction(+ : x + x)1020  for (i = 0; i < 16; ++i)1021    ;1022}1023 1024void test_loop_messages(void) {1025  float a[100], b[100], c[100];1026#pragma omp target1027#pragma omp teams1028// expected-error@+2 {{variable must be of integer or pointer type}}1029#pragma omp distribute simd1030  for (float fi = 0; fi < 10.0; fi++) {1031    c[(int)fi] = a[(int)fi] + b[(int)fi];1032  }1033#pragma omp target1034#pragma omp teams1035// expected-error@+2 {{variable must be of integer or pointer type}}1036#pragma omp distribute simd1037  for (double fi = 0; fi < 10.0; fi++) {1038    c[(int)fi] = a[(int)fi] + b[(int)fi];1039  }1040}1041 1042void linear_modifiers(int argc) {1043  int k;1044#pragma omp target1045#pragma omp teams1046#pragma omp distribute simd linear(k)1047  for (k = 0; k < argc; ++k) ++k;1048#pragma omp target1049#pragma omp teams1050  // omp60-error@+1 {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}}1051#pragma omp distribute simd linear(val(k))1052  for (k = 0; k < argc; ++k) ++k;1053#pragma omp target1054#pragma omp teams1055  // omp60-error@+2 {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}}1056  // expected-error@+1 {{expected 'val' modifier}}1057#pragma omp distribute simd linear(uval(k))1058  for (k = 0; k < argc; ++k) ++k;1059#pragma omp target1060#pragma omp teams1061// omp60-error@+2 {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}}1062// expected-error@+1 {{expected 'val' modifier}}1063#pragma omp distribute simd linear(ref(k))1064  for (k = 0; k < argc; ++k) ++k;1065#pragma omp target1066#pragma omp teams1067// omp60-error@+2 {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}}1068// expected-error@+1 {{expected 'val' modifier}}1069#pragma omp distribute simd linear(foo(k))1070  for (k = 0; k < argc; ++k) ++k;1071}1072 1073void test_nontemporal(void) {1074  int i;1075// omp45-error@+4 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1076// expected-error@+3 {{expected expression}}1077// expected-error@+2 {{expected ')'}}1078// expected-note@+1 {{to match this '('}}1079#pragma omp distribute simd nontemporal(1080  for (i = 0; i < 16; ++i)1081    ;1082// omp45-error@+4 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1083// expected-error@+3 2 {{expected expression}}1084// expected-error@+2 {{expected ')'}}1085// expected-note@+1 {{to match this '('}}1086#pragma omp distribute simd nontemporal(,1087  for (i = 0; i < 16; ++i)1088    ;1089// omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1090// expected-error@+1 2 {{expected expression}}1091#pragma omp distribute simd nontemporal(, )1092  for (i = 0; i < 16; ++i)1093    ;1094// omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1095// expected-error@+1 {{expected expression}}1096#pragma omp distribute simd nontemporal()1097  for (i = 0; i < 16; ++i)1098    ;1099// omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1100// expected-error@+1 {{expected expression}}1101#pragma omp distribute simd nontemporal(int)1102  for (i = 0; i < 16; ++i)1103    ;1104// omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1105// omp50-and-later-var-error@+1 {{expected variable name}}1106#pragma omp distribute simd nontemporal(0)1107  for (i = 0; i < 16; ++i)1108    ;1109// omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1110// expected-error@+1 {{use of undeclared identifier 'x'}}1111#pragma omp distribute simd nontemporal(x)1112  for (i = 0; i < 16; ++i)1113    ;1114// expected-error@+3 {{use of undeclared identifier 'x'}}1115// omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1116// expected-error@+1 {{use of undeclared identifier 'y'}}1117#pragma omp distribute simd nontemporal(x, y)1118  for (i = 0; i < 16; ++i)1119    ;1120// expected-error@+4 {{use of undeclared identifier 'x'}}1121// expected-error@+3 {{use of undeclared identifier 'y'}}1122// omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1123// expected-error@+1 {{use of undeclared identifier 'z'}}1124#pragma omp distribute simd nontemporal(x, y, z)1125  for (i = 0; i < 16; ++i)1126    ;1127 1128  int x, y;1129// omp45-error@+4 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1130// expected-error@+3 {{expected ',' or ')' in 'nontemporal' clause}}1131// expected-error@+2 {{expected ')'}}1132// expected-note@+1 {{to match this '('}}1133#pragma omp distribute simd nontemporal(x :)1134  for (i = 0; i < 16; ++i)1135    ;1136// omp45-error@+4 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1137// expected-error@+3 {{expected ')'}}1138// expected-note@+2 {{to match this '('}}1139// expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}}1140#pragma omp distribute simd nontemporal(x :, )1141  for (i = 0; i < 16; ++i)1142    ;1143 1144// omp50-temporal-note@+3 {{defined as nontemporal}}1145// omp-50-and-later-temporal-error@+2 {{a variable cannot appear in more than one nontemporal clause}}1146// omp45-error@+1 2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1147#pragma omp distribute simd nontemporal(x) nontemporal(x)1148  for (i = 0; i < 16; ++i)1149    ;1150 1151// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1152#pragma omp distribute simd private(x) nontemporal(x)1153  for (i = 0; i < 16; ++i)1154    ;1155 1156// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1157#pragma omp distribute simd nontemporal(x) private(x)1158  for (i = 0; i < 16; ++i)1159    ;1160 1161// omp45-error@+3 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1162// expected-note@+2 {{to match this '('}}1163// expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}}1164#pragma omp distribute simd nontemporal(x, y : 0)1165  for (i = 0; i < 16; ++i)1166    ;1167 1168// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1169#pragma omp distribute simd nontemporal(x) lastprivate(x)1170  for (i = 0; i < 16; ++i)1171    ;1172 1173// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}1174#pragma omp distribute simd lastprivate(x) nontemporal(x)1175  for (i = 0; i < 16; ++i)1176    ;1177// omp45-error@+2 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}1178// expected-error@+1 {{expected '(' after 'order'}}1179#pragma omp distribute simd order1180  for (int i = 0; i < 10; ++i)1181    ;1182// omp-50-and-later-error@+4 {{expected 'concurrent' in OpenMP clause 'order'}}1183// expected-note@+3 {{to match this '('}}1184// expected-error@+2 {{expected ')'}}1185// omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}1186#pragma omp distribute simd order(1187  for (int i = 0; i < 10; ++i)1188    ;1189// omp-50-and-later-error@+4 {{expected 'concurrent' in OpenMP clause 'order'}}1190// expected-note@+3 {{to match this '('}}1191// expected-error@+2 {{expected ')'}} 1192// omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}} 1193#pragma omp distribute simd order(none1194  for (int i = 0; i < 10; ++i)1195    ;1196// expected-note@+3 {{to match this '('}}1197// expected-error@+2 {{expected ')'}}1198// omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}1199#pragma omp distribute simd order(concurrent1200  for (int i = 0; i < 10; ++i)1201    ;1202// omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}1203#pragma omp distribute simd order(concurrent)1204  for (int i = 0; i < 10; ++i)1205    ;1206  // omp-50-and-later-error@+2 {{expected 'concurrent' in OpenMP clause 'order'}}1207  // omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}1208#pragma omp distribute simd order(unconstrained:)1209  for (int i = 0; i < 10; ++i)1210    ;1211  // omp50-error@+4 {{expected 'concurrent' in OpenMP clause 'order'}}1212  // expected-note@+3 {{to match this '('}}1213  // expected-error@+2 {{expected ')'}}1214  // omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}1215#pragma omp distribute simd order(reproducible:concurrent1216  for (int i = 0; i < 10; ++i)1217    ;1218  // omp50-error@+2 {{expected 'concurrent' in OpenMP clause 'order'}}1219  // omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}1220#pragma omp distribute simd order(reproducible:concurrent)1221  for (int i = 0; i < 10; ++i)1222    ;1223  // omp50-error@+2 {{expected 'concurrent' in OpenMP clause 'order'}}1224  // omp45-error@+1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}1225#pragma omp distribute simd order(unconstrained:concurrent)1226  for (int i = 0; i < 10; ++i)1227    ;1228  // omp-clause-error@+2 {{directive '#pragma omp distribute simd' cannot contain more than one 'order' clause}}1229  // omp45-error@+1 2 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}1230#pragma omp distribute simd order(concurrent) order(concurrent)1231  for (int i = 0; i < 10; ++i)1232    ;1233}1234