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