brintos

brintos / llvm-project-archived public Read only

0
0
Text · 32.4 KiB · 7d383d3 Raw
876 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 %s -Wuninitialized3// RUN: %clang_cc1 -fsyntax-only -fopenmp -verify=expected,omp51 %s -Wuninitialized4 5// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=45 -verify=expected,omp45 %s -Wuninitialized6// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=50 -verify=expected,omp50 %s -Wuninitialized7// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify=expected,omp51 %s -Wuninitialized8 9// expected-error@+1 {{unexpected OpenMP directive '#pragma omp parallel for simd'}}10#pragma omp parallel for simd11 12// expected-error@+1 {{unexpected OpenMP directive '#pragma omp parallel for simd'}}13#pragma omp parallel for simd foo14 15void test_no_clause(void) {16  int i;17#pragma omp parallel for simd18  for (i = 0; i < 16; ++i)19    ;20 21// expected-error@+2 {{statement after '#pragma omp parallel for simd' must be a for loop}}22#pragma omp parallel for simd23  ++i;24}25 26void test_branch_protected_scope(void) {27  int i = 0;28L1:29  ++i;30 31  int x[24];32 33#pragma omp parallel34#pragma omp parallel for simd35  for (i = 0; i < 16; ++i) {36    if (i == 5)37      goto L1; // expected-error {{use of undeclared label 'L1'}}38    else if (i == 6)39      return; // expected-error {{cannot return from OpenMP region}}40    else if (i == 7)41      goto L2;42    else if (i == 8) {43    L2:44      x[i]++;45    }46  }47 48  if (x[0] == 0)49    goto L2; // expected-error {{use of undeclared label 'L2'}}50  else if (x[1] == 1)51    goto L1;52}53 54void test_invalid_clause(void) {55  int i;56#pragma omp parallel57// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}58#pragma omp parallel for simd foo bar59  for (i = 0; i < 16; ++i)60    ;61}62 63void test_non_identifiers(void) {64  int i, x;65 66#pragma omp parallel67// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}68#pragma omp parallel for simd;69  for (i = 0; i < 16; ++i)70    ;71#pragma omp parallel72// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}73#pragma omp parallel for simd linear(x);74  for (i = 0; i < 16; ++i)75    ;76 77#pragma omp parallel78// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}79#pragma omp parallel for simd private(x);80  for (i = 0; i < 16; ++i)81    ;82 83#pragma omp parallel84// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}85#pragma omp parallel for simd, private(x);86  for (i = 0; i < 16; ++i)87    ;88}89 90extern int foo(void);91void test_safelen(void) {92  int i;93// expected-error@+1 {{expected '('}}94#pragma omp parallel for simd safelen95  for (i = 0; i < 16; ++i)96    ;97// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}98#pragma omp parallel for simd safelen(99  for (i = 0; i < 16; ++i)100    ;101// expected-error@+1 {{expected expression}}102#pragma omp parallel for simd safelen()103  for (i = 0; i < 16; ++i)104    ;105// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}106#pragma omp parallel for simd safelen(,107  for (i = 0; i < 16; ++i)108    ;109// expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}110#pragma omp parallel for simd safelen(, )111  for (i = 0; i < 16; ++i)112    ;113// expected-warning@+2 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}114// expected-error@+1 {{expected '('}}115#pragma omp parallel for simd safelen 4)116  for (i = 0; i < 16; ++i)117    ;118// expected-error@+2 {{expected ')'}}119// expected-note@+1 {{to match this '('}}120#pragma omp parallel for simd safelen(4121  for (i = 0; i < 16; ++i)122    ;123// expected-error@+2 {{expected ')'}}124// expected-note@+1 {{to match this '('}}125#pragma omp parallel for simd safelen(4,126  for (i = 0; i < 16; ++i)127    ;128// expected-error@+2 {{expected ')'}}129// expected-note@+1 {{to match this '('}}130#pragma omp parallel for simd safelen(4, )131  for (i = 0; i < 16; ++i)132    ;133#pragma omp parallel for simd safelen(4)134  for (i = 0; i < 16; ++i)135    ;136// expected-error@+2 {{expected ')'}}137// expected-note@+1 {{to match this '('}}138#pragma omp parallel for simd safelen(4 4)139  for (i = 0; i < 16; ++i)140    ;141// expected-error@+2 {{expected ')'}}142// expected-note@+1 {{to match this '('}}143#pragma omp parallel for simd safelen(4, , 4)144  for (i = 0; i < 16; ++i)145    ;146#pragma omp parallel for simd safelen(4)147  for (i = 0; i < 16; ++i)148    ;149// expected-error@+2 {{expected ')'}}150// expected-note@+1 {{to match this '('}}151#pragma omp parallel for simd safelen(4, 8)152  for (i = 0; i < 16; ++i)153    ;154// expected-error@+1 {{integer constant expression}}155#pragma omp parallel for simd safelen(2.5)156  for (i = 0; i < 16; ++i)157    ;158// expected-error@+1 {{integer constant expression}}159#pragma omp parallel for simd safelen(foo())160  for (i = 0; i < 16; ++i)161    ;162// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}163#pragma omp parallel for simd safelen(-5)164  for (i = 0; i < 16; ++i)165    ;166// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}167#pragma omp parallel for simd safelen(0)168  for (i = 0; i < 16; ++i)169    ;170// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}171#pragma omp parallel for simd safelen(5 - 5)172  for (i = 0; i < 16; ++i)173    ;174}175 176void test_simdlen(void) {177  int i;178// expected-error@+1 {{expected '('}}179#pragma omp parallel for simd simdlen180  for (i = 0; i < 16; ++i)181    ;182// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}183#pragma omp parallel for simd simdlen(184  for (i = 0; i < 16; ++i)185    ;186// expected-error@+1 {{expected expression}}187#pragma omp parallel for simd simdlen()188  for (i = 0; i < 16; ++i)189    ;190// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}191#pragma omp parallel for simd simdlen(,192  for (i = 0; i < 16; ++i)193    ;194// expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}195#pragma omp parallel for simd simdlen(, )196  for (i = 0; i < 16; ++i)197    ;198// expected-warning@+2 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}199// expected-error@+1 {{expected '('}}200#pragma omp parallel for simd simdlen 4)201  for (i = 0; i < 16; ++i)202    ;203// expected-error@+2 {{expected ')'}}204// expected-note@+1 {{to match this '('}}205#pragma omp parallel for simd simdlen(4206  for (i = 0; i < 16; ++i)207    ;208// expected-error@+2 {{expected ')'}}209// expected-note@+1 {{to match this '('}}210#pragma omp parallel for simd simdlen(4,211  for (i = 0; i < 16; ++i)212    ;213// expected-error@+2 {{expected ')'}}214// expected-note@+1 {{to match this '('}}215#pragma omp parallel for simd simdlen(4, )216  for (i = 0; i < 16; ++i)217    ;218#pragma omp parallel for simd simdlen(4)219  for (i = 0; i < 16; ++i)220    ;221// expected-error@+2 {{expected ')'}}222// expected-note@+1 {{to match this '('}}223#pragma omp parallel for simd simdlen(4 4)224  for (i = 0; i < 16; ++i)225    ;226// expected-error@+2 {{expected ')'}}227// expected-note@+1 {{to match this '('}}228#pragma omp parallel for simd simdlen(4, , 4)229  for (i = 0; i < 16; ++i)230    ;231#pragma omp parallel for simd simdlen(4)232  for (i = 0; i < 16; ++i)233    ;234// expected-error@+2 {{expected ')'}}235// expected-note@+1 {{to match this '('}}236#pragma omp parallel for simd simdlen(4, 8)237  for (i = 0; i < 16; ++i)238    ;239// expected-error@+1 {{integer constant expression}}240#pragma omp parallel for simd simdlen(2.5)241  for (i = 0; i < 16; ++i)242    ;243// expected-error@+1 {{integer constant expression}}244#pragma omp parallel for simd simdlen(foo())245  for (i = 0; i < 16; ++i)246    ;247// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}248#pragma omp parallel for simd simdlen(-5)249  for (i = 0; i < 16; ++i)250    ;251// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}252#pragma omp parallel for simd simdlen(0)253  for (i = 0; i < 16; ++i)254    ;255// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}256#pragma omp parallel for simd simdlen(5 - 5)257  for (i = 0; i < 16; ++i)258    ;259}260 261void test_safelen_simdlen(void) {262  int i;263// expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}264#pragma omp parallel for simd simdlen(6) safelen(5)265  for (i = 0; i < 16; ++i)266    ;267// expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}268#pragma omp parallel for simd safelen(5) simdlen(6)269  for (i = 0; i < 16; ++i)270    ;271}272 273void test_collapse(void) {274  int i;275#pragma omp parallel276// expected-error@+1 {{expected '('}}277#pragma omp parallel for simd collapse278  for (i = 0; i < 16; ++i)279    ;280#pragma omp parallel281// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}282#pragma omp parallel for simd collapse(283  for (i = 0; i < 16; ++i)284    ;285#pragma omp parallel286// expected-error@+1 {{expected expression}}287#pragma omp parallel for simd collapse()288  for (i = 0; i < 16; ++i)289    ;290#pragma omp parallel291// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}292#pragma omp parallel for simd collapse(,293  for (i = 0; i < 16; ++i)294    ;295#pragma omp parallel296// expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}297#pragma omp parallel for simd collapse(, )298  for (i = 0; i < 16; ++i)299    ;300#pragma omp parallel301// expected-warning@+2 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}302// expected-error@+1 {{expected '('}}303#pragma omp parallel for simd collapse 4)304  for (i = 0; i < 16; ++i)305    ;306#pragma omp parallel307// expected-error@+2 {{expected ')'}}308// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}309#pragma omp parallel for simd collapse(4310  for (i = 0; i < 16; ++i)311    ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}}312#pragma omp parallel313// expected-error@+2 {{expected ')'}}314// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}315#pragma omp parallel for simd collapse(4,316  for (i = 0; i < 16; ++i)317    ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}}318#pragma omp parallel319// expected-error@+2 {{expected ')'}}320// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}321#pragma omp parallel for simd collapse(4, )322  for (i = 0; i < 16; ++i)323    ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}}324#pragma omp parallel325// expected-note@+1 {{as specified in 'collapse' clause}}326#pragma omp parallel for simd collapse(4)327  for (i = 0; i < 16; ++i)328    ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}}329#pragma omp parallel330// expected-error@+2 {{expected ')'}}331// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}332#pragma omp parallel for simd collapse(4 4)333  for (i = 0; i < 16; ++i)334    ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}}335#pragma omp parallel336// expected-error@+2 {{expected ')'}}337// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}338#pragma omp parallel for simd collapse(4, , 4)339  for (i = 0; i < 16; ++i)340    ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}}341#pragma omp parallel342#pragma omp parallel for simd collapse(4)343  for (int i1 = 0; i1 < 16; ++i1)344    for (int i2 = 0; i2 < 16; ++i2)345      for (int i3 = 0; i3 < 16; ++i3)346        for (int i4 = 0; i4 < 16; ++i4)347          foo();348#pragma omp parallel349// expected-error@+2 {{expected ')'}}350// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}351#pragma omp parallel for simd collapse(4, 8)352  for (i = 0; i < 16; ++i)353    ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}}354#pragma omp parallel355// expected-error@+1 {{integer constant expression}}356#pragma omp parallel for simd collapse(2.5)357  for (i = 0; i < 16; ++i)358    ;359#pragma omp parallel360// expected-error@+1 {{integer constant expression}}361#pragma omp parallel for simd collapse(foo())362  for (i = 0; i < 16; ++i)363    ;364#pragma omp parallel365// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}366#pragma omp parallel for simd collapse(-5)367  for (i = 0; i < 16; ++i)368    ;369#pragma omp parallel370// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}371#pragma omp parallel for simd collapse(0)372  for (i = 0; i < 16; ++i)373    ;374#pragma omp parallel375// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}376#pragma omp parallel for simd collapse(5 - 5)377  for (i = 0; i < 16; ++i)378    ;379#pragma omp parallel380#pragma omp parallel for simd collapse(2)381  for (i = 0; i < 16; ++i)382    for (int j = 0; j < 16; ++j)383// expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}}384#pragma omp parallel for simd reduction(+ : i, j)385      for (int k = 0; k < 16; ++k)386        i += j;387}388 389void test_linear(void) {390  int i;391// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}392#pragma omp parallel for simd linear(393  for (i = 0; i < 16; ++i)394    ;395// expected-error@+2 {{expected expression}}396// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}397#pragma omp parallel for simd linear(,398  for (i = 0; i < 16; ++i)399    ;400// expected-error@+2 {{expected expression}}401// expected-error@+1 {{expected expression}}402#pragma omp parallel for simd linear(, )403  for (i = 0; i < 16; ++i)404    ;405// expected-error@+1 {{expected expression}}406#pragma omp parallel for simd linear()407  for (i = 0; i < 16; ++i)408    ;409// expected-error@+1 {{expected expression}}410#pragma omp parallel for simd linear(int)411  for (i = 0; i < 16; ++i)412    ;413// expected-error@+1 {{expected variable name}}414#pragma omp parallel for simd linear(0)415  for (i = 0; i < 16; ++i)416    ;417// expected-error@+1 {{use of undeclared identifier 'x'}}418#pragma omp parallel for simd linear(x)419  for (i = 0; i < 16; ++i)420    ;421// expected-error@+2 {{use of undeclared identifier 'x'}}422// expected-error@+1 {{use of undeclared identifier 'y'}}423#pragma omp parallel for simd linear(x, y)424  for (i = 0; i < 16; ++i)425    ;426// expected-error@+3 {{use of undeclared identifier 'x'}}427// expected-error@+2 {{use of undeclared identifier 'y'}}428// expected-error@+1 {{use of undeclared identifier 'z'}}429#pragma omp parallel for simd linear(x, y, z)430  for (i = 0; i < 16; ++i)431    ;432 433  int x, y;434// expected-error@+1 {{expected expression}}435#pragma omp parallel for simd linear(x :)436  for (i = 0; i < 16; ++i)437    ;438// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}439#pragma omp parallel for simd linear(x :, )440  for (i = 0; i < 16; ++i)441    ;442#pragma omp parallel for simd linear(x : 1)443  for (i = 0; i < 16; ++i)444    ;445#pragma omp parallel for simd linear(x : 2 * 2)446  for (i = 0; i < 16; ++i)447    ;448// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}449#pragma omp parallel for simd linear(x : 1, y)450  for (i = 0; i < 16; ++i)451    ;452// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}453#pragma omp parallel for simd linear(x : 1, y, z : 1)454  for (i = 0; i < 16; ++i)455    ;456 457// expected-note@+2 {{defined as linear}}458// expected-error@+1 {{linear variable cannot be linear}}459#pragma omp parallel for simd linear(x) linear(x)460  for (i = 0; i < 16; ++i)461    ;462 463// expected-note@+2 {{defined as private}}464// expected-error@+1 {{private variable cannot be linear}}465#pragma omp parallel for simd private(x) linear(x)466  for (i = 0; i < 16; ++i)467    ;468 469// expected-note@+2 {{defined as linear}}470// expected-error@+1 {{linear variable cannot be private}}471#pragma omp parallel for simd linear(x) private(x)472  for (i = 0; i < 16; ++i)473    ;474 475// expected-warning@+1 {{zero linear step ('x' and other variables in clause should probably be const)}}476#pragma omp parallel for simd linear(x, y : 0)477  for (i = 0; i < 16; ++i)478    ;479 480// expected-note@+2 {{defined as linear}}481// expected-error@+1 {{linear variable cannot be lastprivate}}482#pragma omp parallel for simd linear(x) lastprivate(x)483  for (i = 0; i < 16; ++i)484    ;485 486#pragma omp parallel487// expected-note@+2 {{defined as lastprivate}}488// expected-error@+1 {{lastprivate variable cannot be linear}}489#pragma omp parallel for simd lastprivate(x) linear(x)490  for (i = 0; i < 16; ++i)491    ;492}493 494void test_aligned(void) {495  int i;496// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}497#pragma omp parallel for simd aligned(498  for (i = 0; i < 16; ++i)499    ;500// expected-error@+2 {{expected expression}}501// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}502#pragma omp parallel for simd aligned(,503  for (i = 0; i < 16; ++i)504    ;505// expected-error@+2 {{expected expression}}506// expected-error@+1 {{expected expression}}507#pragma omp parallel for simd aligned(, )508  for (i = 0; i < 16; ++i)509    ;510// expected-error@+1 {{expected expression}}511#pragma omp parallel for simd aligned()512  for (i = 0; i < 16; ++i)513    ;514// expected-error@+1 {{expected expression}}515#pragma omp parallel for simd aligned(int)516  for (i = 0; i < 16; ++i)517    ;518// expected-error@+1 {{expected variable name}}519#pragma omp parallel for simd aligned(0)520  for (i = 0; i < 16; ++i)521    ;522// expected-error@+1 {{use of undeclared identifier 'x'}}523#pragma omp parallel for simd aligned(x)524  for (i = 0; i < 16; ++i)525    ;526// expected-error@+2 {{use of undeclared identifier 'x'}}527// expected-error@+1 {{use of undeclared identifier 'y'}}528#pragma omp parallel for simd aligned(x, y)529  for (i = 0; i < 16; ++i)530    ;531// expected-error@+3 {{use of undeclared identifier 'x'}}532// expected-error@+2 {{use of undeclared identifier 'y'}}533// expected-error@+1 {{use of undeclared identifier 'z'}}534#pragma omp parallel for simd aligned(x, y, z)535  for (i = 0; i < 16; ++i)536    ;537 538  int *x, y, z[25]; // expected-note 4 {{'y' defined here}}539#pragma omp parallel for simd aligned(x)540  for (i = 0; i < 16; ++i)541    ;542#pragma omp parallel for simd aligned(z)543  for (i = 0; i < 16; ++i)544    ;545// expected-error@+1 {{expected expression}}546#pragma omp parallel for simd aligned(x :)547  for (i = 0; i < 16; ++i)548    ;549// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}550#pragma omp parallel for simd aligned(x :, )551  for (i = 0; i < 16; ++i)552    ;553#pragma omp parallel for simd aligned(x : 1)554  for (i = 0; i < 16; ++i)555    ;556#pragma omp parallel for simd aligned(x : 2 * 2)557  for (i = 0; i < 16; ++i)558    ;559// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}560#pragma omp parallel for simd aligned(x : 1, y)561  for (i = 0; i < 16; ++i)562    ;563// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}564#pragma omp parallel for simd aligned(x : 1, y, z : 1)565  for (i = 0; i < 16; ++i)566    ;567 568// expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}569#pragma omp parallel for simd aligned(x, y)570  for (i = 0; i < 16; ++i)571    ;572// expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}573#pragma omp parallel for simd aligned(x, y, z)574  for (i = 0; i < 16; ++i)575    ;576 577// expected-note@+2 {{defined as aligned}}578// expected-error@+1 {{a variable cannot appear in more than one aligned clause}}579#pragma omp parallel for simd aligned(x) aligned(z, x)580  for (i = 0; i < 16; ++i)581    ;582 583// expected-note@+3 {{defined as aligned}}584// expected-error@+2 {{a variable cannot appear in more than one aligned clause}}585// expected-error@+1 2 {{argument of aligned clause should be array or pointer, not 'int'}}586#pragma omp parallel for simd aligned(x, y, z) aligned(y, z)587  for (i = 0; i < 16; ++i)588    ;589}590 591 592void test_private(void) {593  int i;594#pragma omp parallel595// expected-error@+2 {{expected expression}}596// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}597#pragma omp parallel for simd private(598  for (i = 0; i < 16; ++i)599    ;600#pragma omp parallel601// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}602// expected-error@+1 2 {{expected expression}}603#pragma omp parallel for simd private(,604  for (i = 0; i < 16; ++i)605    ;606#pragma omp parallel607// expected-error@+1 2 {{expected expression}}608#pragma omp parallel for simd private(, )609  for (i = 0; i < 16; ++i)610    ;611#pragma omp parallel612// expected-error@+1 {{expected expression}}613#pragma omp parallel for simd private()614  for (i = 0; i < 16; ++i)615    ;616#pragma omp parallel617// expected-error@+1 {{expected expression}}618#pragma omp parallel for simd private(int)619  for (i = 0; i < 16; ++i)620    ;621#pragma omp parallel622// expected-error@+1 {{expected variable name}}623#pragma omp parallel for simd private(0)624  for (i = 0; i < 16; ++i)625    ;626 627  int x, y, z;628#pragma omp parallel629#pragma omp parallel for simd private(x)630  for (i = 0; i < 16; ++i)631    ;632#pragma omp parallel633#pragma omp parallel for simd private(x, y)634  for (i = 0; i < 16; ++i)635    ;636#pragma omp parallel637#pragma omp parallel for simd private(x, y, z)638  for (i = 0; i < 16; ++i) {639    x = y * i + z;640  }641}642 643void test_lastprivate(void) {644  int i;645#pragma omp parallel646// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}647// expected-error@+1 {{expected expression}}648#pragma omp parallel for simd lastprivate(649  for (i = 0; i < 16; ++i)650    ;651 652#pragma omp parallel653// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}654// expected-error@+1 2 {{expected expression}}655#pragma omp parallel for simd lastprivate(,656  for (i = 0; i < 16; ++i)657    ;658#pragma omp parallel659// expected-error@+1 2 {{expected expression}}660#pragma omp parallel for simd lastprivate(, )661  for (i = 0; i < 16; ++i)662    ;663#pragma omp parallel664// expected-error@+1 {{expected expression}}665#pragma omp parallel for simd lastprivate()666  for (i = 0; i < 16; ++i)667    ;668#pragma omp parallel669// expected-error@+1 {{expected expression}}670#pragma omp parallel for simd lastprivate(int)671  for (i = 0; i < 16; ++i)672    ;673#pragma omp parallel674// expected-error@+1 {{expected variable name}}675#pragma omp parallel for simd lastprivate(0)676  for (i = 0; i < 16; ++i)677    ;678 679  int x, y, z;680#pragma omp parallel681#pragma omp parallel for simd lastprivate(x)682  for (i = 0; i < 16; ++i)683    ;684#pragma omp parallel685#pragma omp parallel for simd lastprivate(x, y)686  for (i = 0; i < 16; ++i)687    ;688#pragma omp parallel689#pragma omp parallel for simd lastprivate(x, y, z)690  for (i = 0; i < 16; ++i)691    ;692}693 694void test_firstprivate(void) {695  int i;696#pragma omp parallel697// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}698// expected-error@+1 {{expected expression}}699#pragma omp parallel for simd firstprivate(700  for (i = 0; i < 16; ++i)701    ;702 703#pragma omp parallel704// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}705// expected-error@+1 2 {{expected expression}}706#pragma omp parallel for simd firstprivate(,707  for (i = 0; i < 16; ++i)708    ;709#pragma omp parallel710// expected-error@+1 2 {{expected expression}}711#pragma omp parallel for simd firstprivate(, )712  for (i = 0; i < 16; ++i)713    ;714#pragma omp parallel715// expected-error@+1 {{expected expression}}716#pragma omp parallel for simd firstprivate()717  for (i = 0; i < 16; ++i)718    ;719#pragma omp parallel720// expected-error@+1 {{expected expression}}721#pragma omp parallel for simd firstprivate(int)722  for (i = 0; i < 16; ++i)723    ;724#pragma omp parallel725// expected-error@+1 {{expected variable name}}726#pragma omp parallel for simd firstprivate(0)727  for (i = 0; i < 16; ++i)728    ;729 730  int x, y, z;731#pragma omp parallel732#pragma omp parallel for simd lastprivate(x) firstprivate(x)733  for (i = 0; i < 16; ++i)734    ;735#pragma omp parallel736#pragma omp parallel for simd lastprivate(x, y) firstprivate(x, y)737  for (i = 0; i < 16; ++i)738    ;739#pragma omp parallel740#pragma omp parallel for simd lastprivate(x, y, z) firstprivate(x, y, z)741  for (i = 0; i < 16; ++i)742    ;743}744 745void test_loop_messages(void) {746  float a[100], b[100], c[100];747#pragma omp parallel748// expected-error@+2 {{variable must be of integer or pointer type}}749#pragma omp parallel for simd750  for (float fi = 0; fi < 10.0; fi++) {751    c[(int)fi] = a[(int)fi] + b[(int)fi];752  }753#pragma omp parallel754// expected-error@+2 {{variable must be of integer or pointer type}}755#pragma omp parallel for simd756  for (double fi = 0; fi < 10.0; fi++) {757    c[(int)fi] = a[(int)fi] + b[(int)fi];758  }759}760 761void test_nontemporal(void) {762  int i;763// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}} expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}764#pragma omp parallel for simd nontemporal(765  for (i = 0; i < 16; ++i)766    ;767// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}} expected-error@+1 2 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}768#pragma omp parallel for simd nontemporal(,769  for (i = 0; i < 16; ++i)770    ;771// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}} expected-error@+1 2 {{expected expression}}772#pragma omp parallel for simd nontemporal(, )773  for (i = 0; i < 16; ++i)774    ;775// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}} expected-error@+1 {{expected expression}}776#pragma omp parallel for simd nontemporal()777  for (i = 0; i < 16; ++i)778    ;779// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}} expected-error@+1 {{expected expression}}780#pragma omp parallel for simd nontemporal(int)781  for (i = 0; i < 16; ++i)782    ;783// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}} omp50-error@+1 {{expected variable name}} omp51-error@+1 {{expected variable name}}784#pragma omp parallel for simd nontemporal(0)785  for (i = 0; i < 16; ++i)786    ;787// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}} expected-error@+1 {{use of undeclared identifier 'x'}}788#pragma omp parallel for simd nontemporal(x)789  for (i = 0; i < 16; ++i)790    ;791// expected-error@+2 {{use of undeclared identifier 'x'}}792// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}} expected-error@+1 {{use of undeclared identifier 'y'}}793#pragma omp parallel for simd nontemporal(x, y)794  for (i = 0; i < 16; ++i)795    ;796// expected-error@+3 {{use of undeclared identifier 'x'}}797// expected-error@+2 {{use of undeclared identifier 'y'}}798// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}} expected-error@+1 {{use of undeclared identifier 'z'}}799#pragma omp parallel for simd nontemporal(x, y, z)800  for (i = 0; i < 16; ++i)801    ;802 803  int x, y;804// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}805#pragma omp parallel for simd nontemporal(x :)806  for (i = 0; i < 16; ++i)807    ;808// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}}809#pragma omp parallel for simd nontemporal(x :, )810  for (i = 0; i < 16; ++i)811    ;812 813// omp51-note@+3 {{defined as nontemporal}}814// omp50-note@+2 {{defined as nontemporal}}815// omp45-error@+1 2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}} omp50-error@+1 {{a variable cannot appear in more than one nontemporal clause}} omp51-error@+1 {{a variable cannot appear in more than one nontemporal clause}}816#pragma omp parallel for simd nontemporal(x) nontemporal(x)817  for (i = 0; i < 16; ++i)818    ;819 820// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}}821#pragma omp parallel for simd private(x) nontemporal(x)822  for (i = 0; i < 16; ++i)823    ;824 825// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}}826#pragma omp parallel for simd nontemporal(x) private(x)827  for (i = 0; i < 16; ++i)828    ;829 830// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}} expected-note@+1 {{to match this '('}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}}831#pragma omp parallel for simd nontemporal(x, y : 0)832  for (i = 0; i < 16; ++i)833    ;834 835// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}}836#pragma omp parallel for simd nontemporal(x) lastprivate(x)837  for (i = 0; i < 16; ++i)838    ;839 840// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp parallel for simd'}}841#pragma omp parallel for simd lastprivate(x) nontemporal(x)842  for (i = 0; i < 16; ++i)843    ;844#pragma omp parallel for simd order // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for simd'}} expected-error {{expected '(' after 'order'}}845  for (int i = 0; i < 10; ++i)846    ;847#pragma omp parallel for simd order( // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for simd'}} expected-error {{expected ')'}} expected-note {{to match this '('}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}} omp51-error {{expected 'concurrent' in OpenMP clause 'order'}}848  for (int i = 0; i < 10; ++i)849    ;850#pragma omp parallel for simd order(none // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for simd'}} expected-error {{expected ')'}} expected-note {{to match this '('}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}} omp51-error {{expected 'concurrent' in OpenMP clause 'order'}}851  for (int i = 0; i < 10; ++i)852    ;853#pragma omp parallel for simd order(concurrent // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for simd'}} expected-error {{expected ')'}} expected-note {{to match this '('}}854  for (int i = 0; i < 10; ++i)855    ;856#pragma omp parallel for simd order(concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for simd'}}857  for (int i = 0; i < 10; ++i)858    ;859#pragma omp parallel for simd order(unconstrained:) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for simd'}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}} omp51-error {{expected 'concurrent' in OpenMP clause 'order'}}860  for (int i = 0; i < 10; ++i)861    ;862#pragma omp parallel for simd order(reproducible:concurrent // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for simd'}} expected-error {{expected ')'}} expected-note {{to match this '('}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}}863  for (int i = 0; i < 10; ++i)864    ;865#pragma omp parallel for simd order(reproducible:concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for simd'}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}}866  for (int i = 0; i < 10; ++i)867    ;868#pragma omp parallel for simd order(unconstrained:concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for simd'}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}}869  for (int i = 0; i < 10; ++i)870    ;871#pragma omp parallel for simd order(concurrent) order(concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for simd'}} omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp parallel for simd'}} omp51-error {{directive '#pragma omp parallel for simd' cannot contain more than one 'order' clause}}872  for (int i = 0; i < 10; ++i)873    ;874}875 876