1020 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 9void xxx(int argc) {10 int x; // expected-note {{initialize the variable 'x' to silence this warning}}11#pragma omp distribute parallel for simd12 for (int i = 0; i < 10; ++i)13 argc = x; // expected-warning {{variable 'x' is uninitialized when used here}}14}15 16// expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute parallel for simd'}}17#pragma omp distribute parallel for simd18 19// expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute parallel for simd'}}20#pragma omp distribute parallel for simd foo21 22void test_no_clause(void) {23 int i;24#pragma omp distribute parallel for simd25 for (i = 0; i < 16; ++i)26 ;27 28// expected-error@+2 {{statement after '#pragma omp distribute parallel for simd' must be a for loop}}29#pragma omp distribute parallel for simd30 ++i;31}32 33void test_branch_protected_scope(void) {34 int i = 0;35L1:36 ++i;37 38 int x[24];39 40#pragma omp target41#pragma omp teams42#pragma omp distribute parallel for simd43 for (i = 0; i < 16; ++i) {44 if (i == 5)45 goto L1; // expected-error {{use of undeclared label 'L1'}}46 else if (i == 6)47 return; // expected-error {{cannot return from OpenMP region}}48 else if (i == 7)49 goto L2;50 else if (i == 8) {51 L2:52 x[i]++;53 }54 }55 56 if (x[0] == 0)57 goto L2; // expected-error {{use of undeclared label 'L2'}}58 else if (x[1] == 1)59 goto L1;60}61 62void test_invalid_clause(void) {63 int i;64#pragma omp target65#pragma omp teams66// expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}}67#pragma omp distribute parallel for simd foo bar68 for (i = 0; i < 16; ++i)69 ;70}71 72void test_non_identifiers(void) {73 int i, x;74 75#pragma omp target76#pragma omp teams77// expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}}78#pragma omp distribute parallel for simd;79 for (i = 0; i < 16; ++i)80 ;81#pragma omp target82#pragma omp teams83// expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}}84#pragma omp distribute parallel for simd firstprivate(x);85 for (i = 0; i < 16; ++i)86 ;87 88#pragma omp target89#pragma omp teams90// expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}}91#pragma omp distribute parallel for simd private(x);92 for (i = 0; i < 16; ++i)93 ;94 95#pragma omp target96#pragma omp teams97// expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}}98#pragma omp distribute parallel for simd, private(x);99 for (i = 0; i < 16; ++i)100 ;101}102 103extern int foo(void);104void test_safelen(void) {105 int i;106#pragma omp target107#pragma omp teams108// expected-error@+1 {{expected '('}}109#pragma omp distribute parallel for simd safelen110 for (i = 0; i < 16; ++i)111 ;112#pragma omp target113#pragma omp teams114// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}115#pragma omp distribute parallel for simd safelen(116 for (i = 0; i < 16; ++i)117 ;118#pragma omp target119#pragma omp teams120// expected-error@+1 {{expected expression}}121#pragma omp distribute parallel for simd safelen()122 for (i = 0; i < 16; ++i)123 ;124#pragma omp target125#pragma omp teams126// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}127#pragma omp distribute parallel for simd safelen(,128 for (i = 0; i < 16; ++i)129 ;130#pragma omp target131#pragma omp teams132// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}133#pragma omp distribute parallel for simd safelen(, )134 for (i = 0; i < 16; ++i)135 ;136#pragma omp target137#pragma omp teams138// expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}}139// expected-error@+1 {{expected '('}}140#pragma omp distribute parallel for simd safelen 4)141 for (i = 0; i < 16; ++i)142 ;143#pragma omp target144#pragma omp teams145// expected-error@+2 {{expected ')'}}146// expected-note@+1 {{to match this '('}}147#pragma omp distribute parallel for simd safelen(4148 for (i = 0; i < 16; ++i)149 ;150#pragma omp target151#pragma omp teams152// expected-error@+2 {{expected ')'}}153// expected-note@+1 {{to match this '('}}154#pragma omp distribute parallel for simd safelen(4,155 for (i = 0; i < 16; ++i)156 ;157#pragma omp target158#pragma omp teams159// expected-error@+2 {{expected ')'}}160// expected-note@+1 {{to match this '('}}161#pragma omp distribute parallel for simd safelen(4, )162 for (i = 0; i < 16; ++i)163 ;164#pragma omp target165#pragma omp teams166#pragma omp distribute parallel for simd safelen(4)167 for (i = 0; i < 16; ++i)168 ;169#pragma omp target170#pragma omp teams171// expected-error@+2 {{expected ')'}}172// expected-note@+1 {{to match this '('}}173#pragma omp distribute parallel for simd safelen(4 4)174 for (i = 0; i < 16; ++i)175 ;176#pragma omp target177#pragma omp teams178// expected-error@+2 {{expected ')'}}179// expected-note@+1 {{to match this '('}}180#pragma omp distribute parallel for simd safelen(4, , 4)181 for (i = 0; i < 16; ++i)182 ;183#pragma omp target184#pragma omp teams185#pragma omp distribute parallel for simd safelen(4)186 for (i = 0; i < 16; ++i)187 ;188#pragma omp target189#pragma omp teams190// expected-error@+2 {{expected ')'}}191// expected-note@+1 {{to match this '('}}192#pragma omp distribute parallel for simd safelen(4, 8)193 for (i = 0; i < 16; ++i)194 ;195#pragma omp target196#pragma omp teams197// expected-error@+1 {{integer constant expression}}198#pragma omp distribute parallel for simd safelen(2.5)199 for (i = 0; i < 16; ++i)200 ;201#pragma omp target202#pragma omp teams203// expected-error@+1 {{integer constant expression}}204#pragma omp distribute parallel for simd safelen(foo())205 for (i = 0; i < 16; ++i)206 ;207#pragma omp target208#pragma omp teams209// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}210#pragma omp distribute parallel for simd safelen(-5)211 for (i = 0; i < 16; ++i)212 ;213#pragma omp target214#pragma omp teams215// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}216#pragma omp distribute parallel for simd safelen(0)217 for (i = 0; i < 16; ++i)218 ;219#pragma omp target220#pragma omp teams221// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}222#pragma omp distribute parallel for simd safelen(5 - 5)223 for (i = 0; i < 16; ++i)224 ;225}226 227void test_simdlen(void) {228 int i;229#pragma omp target230#pragma omp teams231// expected-error@+1 {{expected '('}}232#pragma omp distribute parallel for simd simdlen233 for (i = 0; i < 16; ++i)234 ;235#pragma omp target236#pragma omp teams237// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}238#pragma omp distribute parallel for simd simdlen(239 for (i = 0; i < 16; ++i)240 ;241#pragma omp target242#pragma omp teams243// expected-error@+1 {{expected expression}}244#pragma omp distribute parallel for simd simdlen()245 for (i = 0; i < 16; ++i)246 ;247#pragma omp target248#pragma omp teams249// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}250#pragma omp distribute parallel for simd simdlen(,251 for (i = 0; i < 16; ++i)252 ;253#pragma omp target254#pragma omp teams255// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}256#pragma omp distribute parallel for simd simdlen(, )257 for (i = 0; i < 16; ++i)258 ;259#pragma omp target260#pragma omp teams261// expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}}262// expected-error@+1 {{expected '('}}263#pragma omp distribute parallel for simd simdlen 4)264 for (i = 0; i < 16; ++i)265 ;266#pragma omp target267#pragma omp teams268// expected-error@+2 {{expected ')'}}269// expected-note@+1 {{to match this '('}}270#pragma omp distribute parallel for simd simdlen(4271 for (i = 0; i < 16; ++i)272 ;273#pragma omp target274#pragma omp teams275// expected-error@+2 {{expected ')'}}276// expected-note@+1 {{to match this '('}}277#pragma omp distribute parallel for simd simdlen(4,278 for (i = 0; i < 16; ++i)279 ;280#pragma omp target281#pragma omp teams282// expected-error@+2 {{expected ')'}}283// expected-note@+1 {{to match this '('}}284#pragma omp distribute parallel for simd simdlen(4, )285 for (i = 0; i < 16; ++i)286 ;287#pragma omp target288#pragma omp teams289#pragma omp distribute parallel for simd simdlen(4)290 for (i = 0; i < 16; ++i)291 ;292#pragma omp target293#pragma omp teams294// expected-error@+2 {{expected ')'}}295// expected-note@+1 {{to match this '('}}296#pragma omp distribute parallel for simd simdlen(4 4)297 for (i = 0; i < 16; ++i)298 ;299#pragma omp target300#pragma omp teams301// expected-error@+2 {{expected ')'}}302// expected-note@+1 {{to match this '('}}303#pragma omp distribute parallel for simd simdlen(4, , 4)304 for (i = 0; i < 16; ++i)305 ;306#pragma omp target307#pragma omp teams308#pragma omp distribute parallel for simd simdlen(4)309 for (i = 0; i < 16; ++i)310 ;311#pragma omp target312#pragma omp teams313// expected-error@+2 {{expected ')'}}314// expected-note@+1 {{to match this '('}}315#pragma omp distribute parallel for simd simdlen(4, 8)316 for (i = 0; i < 16; ++i)317 ;318#pragma omp target319#pragma omp teams320// expected-error@+1 {{integer constant expression}}321#pragma omp distribute parallel for simd simdlen(2.5)322 for (i = 0; i < 16; ++i)323 ;324#pragma omp target325#pragma omp teams326// expected-error@+1 {{integer constant expression}}327#pragma omp distribute parallel for simd simdlen(foo())328 for (i = 0; i < 16; ++i)329 ;330#pragma omp target331#pragma omp teams332// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}333#pragma omp distribute parallel for simd simdlen(-5)334 for (i = 0; i < 16; ++i)335 ;336#pragma omp target337#pragma omp teams338// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}339#pragma omp distribute parallel for simd simdlen(0)340 for (i = 0; i < 16; ++i)341 ;342#pragma omp target343#pragma omp teams344// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}345#pragma omp distribute parallel for simd simdlen(5 - 5)346 for (i = 0; i < 16; ++i)347 ;348}349 350void test_safelen_simdlen(void) {351 int i;352#pragma omp target353#pragma omp teams354// expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}355#pragma omp distribute parallel for simd simdlen(6) safelen(5)356 for (i = 0; i < 16; ++i)357 ;358 359#pragma omp target360#pragma omp teams361// expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}362#pragma omp distribute parallel for simd safelen(5) simdlen(6)363 for (i = 0; i < 16; ++i)364 ;365}366 367void test_collapse(void) {368 int i;369#pragma omp target370#pragma omp teams371// expected-error@+1 {{expected '('}}372#pragma omp distribute parallel for simd collapse373 for (i = 0; i < 16; ++i)374 ;375#pragma omp target376#pragma omp teams377// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}378#pragma omp distribute parallel for simd collapse(379 for (i = 0; i < 16; ++i)380 ;381#pragma omp target382#pragma omp teams383// expected-error@+1 {{expected expression}}384#pragma omp distribute parallel for simd collapse()385 for (i = 0; i < 16; ++i)386 ;387#pragma omp target388#pragma omp teams389// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}390#pragma omp distribute parallel for simd collapse(,391 for (i = 0; i < 16; ++i)392 ;393#pragma omp target394#pragma omp teams395// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}396#pragma omp distribute parallel for simd collapse(, )397 for (i = 0; i < 16; ++i)398 ;399#pragma omp target400#pragma omp teams401// expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute parallel for simd' are ignored}}402// expected-error@+1 {{expected '('}}403#pragma omp distribute parallel for simd collapse 4)404 for (i = 0; i < 16; ++i)405 ;406#pragma omp target407#pragma omp teams408// expected-error@+2 {{expected ')'}}409// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}410#pragma omp distribute parallel for simd collapse(4411 for (i = 0; i < 16; ++i)412 ; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for simd', but found only 1}}413#pragma omp target414#pragma omp teams415// expected-error@+2 {{expected ')'}}416// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}417#pragma omp distribute parallel for simd collapse(4,418 for (i = 0; i < 16; ++i)419 ; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for simd', but found only 1}}420#pragma omp target421#pragma omp teams422// expected-error@+2 {{expected ')'}}423// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}424#pragma omp distribute parallel for simd collapse(4, )425 for (i = 0; i < 16; ++i)426 ; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for simd', but found only 1}}427#pragma omp target428#pragma omp teams429// expected-note@+1 {{as specified in 'collapse' clause}}430#pragma omp distribute parallel for simd collapse(4)431 for (i = 0; i < 16; ++i)432 ; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for simd', but found only 1}}433#pragma omp target434#pragma omp teams435// expected-error@+2 {{expected ')'}}436// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}437#pragma omp distribute parallel for simd collapse(4 4)438 for (i = 0; i < 16; ++i)439 ; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for simd', but found only 1}}440#pragma omp target441#pragma omp teams442// expected-error@+2 {{expected ')'}}443// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}444#pragma omp distribute parallel for simd collapse(4, , 4)445 for (i = 0; i < 16; ++i)446 ; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for simd', but found only 1}}447#pragma omp target448#pragma omp teams449#pragma omp distribute parallel for simd collapse(4)450 for (int i1 = 0; i1 < 16; ++i1)451 for (int i2 = 0; i2 < 16; ++i2)452 for (int i3 = 0; i3 < 16; ++i3)453 for (int i4 = 0; i4 < 16; ++i4)454 foo();455#pragma omp target456#pragma omp teams457// expected-error@+2 {{expected ')'}}458// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}459#pragma omp distribute parallel for simd collapse(4, 8)460 for (i = 0; i < 16; ++i)461 ; // expected-error {{expected 4 for loops after '#pragma omp distribute parallel for simd', but found only 1}}462#pragma omp target463#pragma omp teams464// expected-error@+1 {{integer constant expression}}465#pragma omp distribute parallel for simd collapse(2.5)466 for (i = 0; i < 16; ++i)467 ;468#pragma omp target469#pragma omp teams470// expected-error@+1 {{integer constant expression}}471#pragma omp distribute parallel for simd collapse(foo())472 for (i = 0; i < 16; ++i)473 ;474#pragma omp target475#pragma omp teams476// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}477#pragma omp distribute parallel for simd collapse(-5)478 for (i = 0; i < 16; ++i)479 ;480#pragma omp target481#pragma omp teams482// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}483#pragma omp distribute parallel for simd collapse(0)484 for (i = 0; i < 16; ++i)485 ;486#pragma omp target487#pragma omp teams488// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}489#pragma omp distribute parallel for simd collapse(5 - 5)490 for (i = 0; i < 16; ++i)491 ;492#pragma omp target493#pragma omp teams494#pragma omp distribute parallel for simd collapse(2)495 for (i = 0; i < 16; ++i)496 for (int j = 0; j < 16; ++j)497// expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}}498#pragma omp distribute parallel for simd reduction(+ : i, j)499 for (int k = 0; k < 16; ++k)500 i += j;501}502 503void test_linear(void) {504 int i;505#pragma omp target506#pragma omp teams507// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}508#pragma omp distribute parallel for simd linear(509 for (i = 0; i < 16; ++i)510 ;511#pragma omp target512#pragma omp teams513// expected-error@+2 {{expected expression}}514// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}515#pragma omp distribute parallel for simd linear(,516 for (i = 0; i < 16; ++i)517 ;518#pragma omp target519#pragma omp teams520// expected-error@+2 {{expected expression}}521// expected-error@+1 {{expected expression}}522#pragma omp distribute parallel for simd linear(, )523 for (i = 0; i < 16; ++i)524 ;525#pragma omp target526#pragma omp teams527// expected-error@+1 {{expected expression}}528#pragma omp distribute parallel for simd linear()529 for (i = 0; i < 16; ++i)530 ;531#pragma omp target532#pragma omp teams533// expected-error@+1 {{expected expression}}534#pragma omp distribute parallel for simd linear(int)535 for (i = 0; i < 16; ++i)536 ;537#pragma omp target538#pragma omp teams539// expected-error@+1 {{expected variable name}}540#pragma omp distribute parallel for simd linear(0)541 for (i = 0; i < 16; ++i)542 ;543#pragma omp target544#pragma omp teams545// expected-error@+1 {{use of undeclared identifier 'x'}}546#pragma omp distribute parallel for simd linear(x)547 for (i = 0; i < 16; ++i)548 ;549#pragma omp target550#pragma omp teams551// expected-error@+2 {{use of undeclared identifier 'x'}}552// expected-error@+1 {{use of undeclared identifier 'y'}}553#pragma omp distribute parallel for simd linear(x, y)554 for (i = 0; i < 16; ++i)555 ;556#pragma omp target557#pragma omp teams558// expected-error@+3 {{use of undeclared identifier 'x'}}559// expected-error@+2 {{use of undeclared identifier 'y'}}560// expected-error@+1 {{use of undeclared identifier 'z'}}561#pragma omp distribute parallel for simd linear(x, y, z)562 for (i = 0; i < 16; ++i)563 ;564}565 566void test_aligned(void) {567 int i;568#pragma omp target569#pragma omp teams570// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}571#pragma omp distribute parallel for simd aligned(572 for (i = 0; i < 16; ++i)573 ;574// expected-error@+2 {{expected expression}}575// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}576#pragma omp distribute parallel for simd aligned(,577 for (i = 0; i < 16; ++i)578 ;579#pragma omp target580#pragma omp teams581// expected-error@+2 {{expected expression}}582// expected-error@+1 {{expected expression}}583#pragma omp distribute parallel for simd aligned(, )584 for (i = 0; i < 16; ++i)585 ;586#pragma omp target587#pragma omp teams588// expected-error@+1 {{expected expression}}589#pragma omp distribute parallel for simd aligned()590 for (i = 0; i < 16; ++i)591 ;592#pragma omp target593#pragma omp teams594// expected-error@+1 {{expected expression}}595#pragma omp distribute parallel for simd aligned(int)596 for (i = 0; i < 16; ++i)597 ;598#pragma omp target599#pragma omp teams600// expected-error@+1 {{expected variable name}}601#pragma omp distribute parallel for simd aligned(0)602 for (i = 0; i < 16; ++i)603 ;604#pragma omp target605#pragma omp teams606// expected-error@+1 {{use of undeclared identifier 'x'}}607#pragma omp distribute parallel for simd aligned(x)608 for (i = 0; i < 16; ++i)609 ;610#pragma omp target611#pragma omp teams612// expected-error@+2 {{use of undeclared identifier 'x'}}613// expected-error@+1 {{use of undeclared identifier 'y'}}614#pragma omp distribute parallel for simd aligned(x, y)615 for (i = 0; i < 16; ++i)616 ;617#pragma omp target618#pragma omp teams619// expected-error@+3 {{use of undeclared identifier 'x'}}620// expected-error@+2 {{use of undeclared identifier 'y'}}621// expected-error@+1 {{use of undeclared identifier 'z'}}622#pragma omp distribute parallel for simd aligned(x, y, z)623 for (i = 0; i < 16; ++i)624 ;625 626 int *x, y, z[25]; // expected-note 4 {{'y' defined here}}627#pragma omp target628#pragma omp teams629#pragma omp distribute parallel for simd aligned(x)630 for (i = 0; i < 16; ++i)631 ;632#pragma omp target633#pragma omp teams634#pragma omp distribute parallel for simd aligned(z)635 for (i = 0; i < 16; ++i)636 ;637#pragma omp target638#pragma omp teams639// expected-error@+1 {{expected expression}}640#pragma omp distribute parallel for simd aligned(x :)641 for (i = 0; i < 16; ++i)642 ;643#pragma omp target644#pragma omp teams645// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}646#pragma omp distribute parallel for simd aligned(x :, )647 for (i = 0; i < 16; ++i)648 ;649#pragma omp target650#pragma omp teams651#pragma omp distribute parallel for simd aligned(x : 1)652 for (i = 0; i < 16; ++i)653 ;654#pragma omp target655#pragma omp teams656#pragma omp distribute parallel for simd aligned(x : 2 * 2)657 for (i = 0; i < 16; ++i)658 ;659#pragma omp target660#pragma omp teams661// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}662#pragma omp distribute parallel for simd aligned(x : 1, y)663 for (i = 0; i < 16; ++i)664 ;665#pragma omp target666#pragma omp teams667// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}668#pragma omp distribute parallel for simd aligned(x : 1, y, z : 1)669 for (i = 0; i < 16; ++i)670 ;671 672#pragma omp target673#pragma omp teams674// expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}675#pragma omp distribute parallel for simd aligned(x, y)676 for (i = 0; i < 16; ++i)677 ;678#pragma omp target679#pragma omp teams680// expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}681#pragma omp distribute parallel for simd aligned(x, y, z)682 for (i = 0; i < 16; ++i)683 ;684 685#pragma omp target686#pragma omp teams687// expected-note@+2 {{defined as aligned}}688// expected-error@+1 {{a variable cannot appear in more than one aligned clause}}689#pragma omp distribute parallel for simd aligned(x) aligned(z, x)690 for (i = 0; i < 16; ++i)691 ;692 693#pragma omp target694#pragma omp teams695// expected-note@+3 {{defined as aligned}}696// expected-error@+2 {{a variable cannot appear in more than one aligned clause}}697// expected-error@+1 2 {{argument of aligned clause should be array or pointer, not 'int'}}698#pragma omp distribute parallel for simd aligned(x, y, z) aligned(y, z)699 for (i = 0; i < 16; ++i)700 ;701}702 703 704void test_private(void) {705 int i;706#pragma omp target707#pragma omp teams708// expected-error@+2 {{expected expression}}709// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}710#pragma omp distribute parallel for simd private(711 for (i = 0; i < 16; ++i)712 ;713#pragma omp target714#pragma omp teams715// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}716// expected-error@+1 2 {{expected expression}}717#pragma omp distribute parallel for simd private(,718 for (i = 0; i < 16; ++i)719 ;720#pragma omp target721#pragma omp teams722// expected-error@+1 2 {{expected expression}}723#pragma omp distribute parallel for simd private(, )724 for (i = 0; i < 16; ++i)725 ;726#pragma omp target727#pragma omp teams728// expected-error@+1 {{expected expression}}729#pragma omp distribute parallel for simd private()730 for (i = 0; i < 16; ++i)731 ;732#pragma omp target733#pragma omp teams734// expected-error@+1 {{expected expression}}735#pragma omp distribute parallel for simd private(int)736 for (i = 0; i < 16; ++i)737 ;738#pragma omp target739#pragma omp teams740// expected-error@+1 {{expected variable name}}741#pragma omp distribute parallel for simd private(0)742 for (i = 0; i < 16; ++i)743 ;744 745 int x, y, z;746#pragma omp target747#pragma omp teams748#pragma omp distribute parallel for simd private(x)749 for (i = 0; i < 16; ++i)750 ;751#pragma omp target752#pragma omp teams753#pragma omp distribute parallel for simd private(x, y)754 for (i = 0; i < 16; ++i)755 ;756#pragma omp target757#pragma omp teams758#pragma omp distribute parallel for simd private(x, y, z)759 for (i = 0; i < 16; ++i) {760 x = y * i + z;761 }762}763 764void test_lastprivate(void) {765 int i;766#pragma omp target767#pragma omp teams768// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}769// expected-error@+1 {{expected expression}}770#pragma omp distribute parallel for simd lastprivate(771 for (i = 0; i < 16; ++i)772 ;773 774#pragma omp target775#pragma omp teams776// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}777// expected-error@+1 2 {{expected expression}}778#pragma omp distribute parallel for simd lastprivate(,779 for (i = 0; i < 16; ++i)780 ;781#pragma omp target782#pragma omp teams783// expected-error@+1 2 {{expected expression}}784#pragma omp distribute parallel for simd lastprivate(, )785 for (i = 0; i < 16; ++i)786 ;787#pragma omp target788#pragma omp teams789// expected-error@+1 {{expected expression}}790#pragma omp distribute parallel for simd lastprivate()791 for (i = 0; i < 16; ++i)792 ;793#pragma omp target794#pragma omp teams795// expected-error@+1 {{expected expression}}796#pragma omp distribute parallel for simd lastprivate(int)797 for (i = 0; i < 16; ++i)798 ;799#pragma omp target800#pragma omp teams801// expected-error@+1 {{expected variable name}}802#pragma omp distribute parallel for simd lastprivate(0)803 for (i = 0; i < 16; ++i)804 ;805 806 int x, y, z;807#pragma omp target808#pragma omp teams809#pragma omp distribute parallel for simd lastprivate(x)810 for (i = 0; i < 16; ++i)811 ;812#pragma omp target813#pragma omp teams814#pragma omp distribute parallel for simd lastprivate(x, y)815 for (i = 0; i < 16; ++i)816 ;817#pragma omp target818#pragma omp teams819#pragma omp distribute parallel for simd lastprivate(x, y, z)820 for (i = 0; i < 16; ++i)821 ;822}823 824void test_firstprivate(void) {825 int i;826#pragma omp target827#pragma omp teams828// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}829// expected-error@+1 {{expected expression}}830#pragma omp distribute parallel for simd firstprivate(831 for (i = 0; i < 16; ++i)832 ;833 834#pragma omp target835#pragma omp teams836// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}837// expected-error@+1 2 {{expected expression}}838#pragma omp distribute parallel for simd firstprivate(,839 for (i = 0; i < 16; ++i)840 ;841#pragma omp target842#pragma omp teams843// expected-error@+1 2 {{expected expression}}844#pragma omp distribute parallel for simd firstprivate(, )845 for (i = 0; i < 16; ++i)846 ;847#pragma omp target848#pragma omp teams849// expected-error@+1 {{expected expression}}850#pragma omp distribute parallel for simd firstprivate()851 for (i = 0; i < 16; ++i)852 ;853#pragma omp target854#pragma omp teams855// expected-error@+1 {{expected expression}}856#pragma omp distribute parallel for simd firstprivate(int)857 for (i = 0; i < 16; ++i)858 ;859#pragma omp target860#pragma omp teams861// expected-error@+1 {{expected variable name}}862#pragma omp distribute parallel for simd firstprivate(0)863 for (i = 0; i < 16; ++i)864 ;865 866 int x, y, z;867// expected-error@+3 {{lastprivate variable cannot be firstprivate}} expected-note@+3 {{defined as lastprivate}}868#pragma omp target869#pragma omp teams870#pragma omp distribute parallel for simd lastprivate(x) firstprivate(x)871 for (i = 0; i < 16; ++i)872 ;873// expected-error@+3 2 {{lastprivate variable cannot be firstprivate}} expected-note@+3 2 {{defined as lastprivate}}874#pragma omp target875#pragma omp teams876#pragma omp distribute parallel for simd lastprivate(x, y) firstprivate(x, y)877 for (i = 0; i < 16; ++i)878 ;879// expected-error@+3 3 {{lastprivate variable cannot be firstprivate}} expected-note@+3 3 {{defined as lastprivate}}880#pragma omp target881#pragma omp teams882#pragma omp distribute parallel for simd lastprivate(x, y, z) firstprivate(x, y, z)883 for (i = 0; i < 16; ++i)884 ;885}886 887void test_loop_messages(void) {888 float a[100], b[100], c[100];889#pragma omp target890#pragma omp teams891// expected-error@+2 {{variable must be of integer or pointer type}}892#pragma omp distribute parallel for simd893 for (float fi = 0; fi < 10.0; fi++) {894 c[(int)fi] = a[(int)fi] + b[(int)fi];895 }896#pragma omp target897#pragma omp teams898// expected-error@+2 {{variable must be of integer or pointer type}}899#pragma omp distribute parallel for simd900 for (double fi = 0; fi < 10.0; fi++) {901 c[(int)fi] = a[(int)fi] + b[(int)fi];902 }903}904 905void test_nontemporal(void) {906 int i;907// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}} expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}908#pragma omp distribute parallel for simd nontemporal(909 for (i = 0; i < 16; ++i)910 ;911// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}} expected-error@+1 2 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}912#pragma omp distribute parallel for simd nontemporal(,913 for (i = 0; i < 16; ++i)914 ;915// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}} expected-error@+1 2 {{expected expression}}916#pragma omp distribute parallel for simd nontemporal(, )917 for (i = 0; i < 16; ++i)918 ;919// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}} expected-error@+1 {{expected expression}}920#pragma omp distribute parallel for simd nontemporal()921 for (i = 0; i < 16; ++i)922 ;923// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}} expected-error@+1 {{expected expression}}924#pragma omp distribute parallel for simd nontemporal(int)925 for (i = 0; i < 16; ++i)926 ;927// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}} omp50-error@+1 {{expected variable name}} omp51-error@+1 {{expected variable name}}928#pragma omp distribute parallel for simd nontemporal(0)929 for (i = 0; i < 16; ++i)930 ;931// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}} expected-error@+1 {{use of undeclared identifier 'x'}}932#pragma omp distribute parallel for simd nontemporal(x)933 for (i = 0; i < 16; ++i)934 ;935// expected-error@+2 {{use of undeclared identifier 'x'}}936// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}} expected-error@+1 {{use of undeclared identifier 'y'}}937#pragma omp distribute parallel for simd nontemporal(x, y)938 for (i = 0; i < 16; ++i)939 ;940// expected-error@+3 {{use of undeclared identifier 'x'}}941// expected-error@+2 {{use of undeclared identifier 'y'}}942// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}} expected-error@+1 {{use of undeclared identifier 'z'}}943#pragma omp distribute parallel for simd nontemporal(x, y, z)944 for (i = 0; i < 16; ++i)945 ;946 947 int x, y;948// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}949#pragma omp distribute parallel for simd nontemporal(x :)950 for (i = 0; i < 16; ++i)951 ;952// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}}953#pragma omp distribute parallel for simd nontemporal(x :, )954 for (i = 0; i < 16; ++i)955 ;956 957// omp51-note@+3 {{defined as nontemporal}}958// omp50-note@+2 {{defined as nontemporal}}959// omp45-error@+1 2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute 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}}960#pragma omp distribute parallel for simd nontemporal(x) nontemporal(x)961 for (i = 0; i < 16; ++i)962 ;963 964// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}}965#pragma omp distribute parallel for simd private(x) nontemporal(x)966 for (i = 0; i < 16; ++i)967 ;968 969// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}}970#pragma omp distribute parallel for simd nontemporal(x) private(x)971 for (i = 0; i < 16; ++i)972 ;973 974// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}} expected-note@+1 {{to match this '('}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}}975#pragma omp distribute parallel for simd nontemporal(x, y : 0)976 for (i = 0; i < 16; ++i)977 ;978 979// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}}980#pragma omp distribute parallel for simd nontemporal(x) lastprivate(x)981 for (i = 0; i < 16; ++i)982 ;983 984// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute parallel for simd'}}985#pragma omp distribute parallel for simd lastprivate(x) nontemporal(x)986 for (i = 0; i < 16; ++i)987 ;988#pragma omp distribute parallel for simd order // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute parallel for simd'}} expected-error {{expected '(' after 'order'}}989 for (int i = 0; i < 10; ++i)990 ;991#pragma omp distribute parallel for simd order( // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute 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'}}992 for (int i = 0; i < 10; ++i)993 ;994#pragma omp distribute parallel for simd order(none // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute 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'}}995 for (int i = 0; i < 10; ++i)996 ;997#pragma omp distribute parallel for simd order(concurrent // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute parallel for simd'}} expected-error {{expected ')'}} expected-note {{to match this '('}}998 for (int i = 0; i < 10; ++i)999 ;1000#pragma omp distribute parallel for simd order(concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute parallel for simd'}}1001 for (int i = 0; i < 10; ++i)1002 ;1003#pragma omp distribute parallel for simd order(unconstrained:) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute parallel for simd'}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}} omp51-error {{expected 'concurrent' in OpenMP clause 'order'}}1004 for (int i = 0; i < 10; ++i)1005 ;1006#pragma omp distribute parallel for simd order(reproducible:concurrent // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute parallel for simd'}} expected-error {{expected ')'}} expected-note {{to match this '('}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}}1007 for (int i = 0; i < 10; ++i)1008 ;1009#pragma omp distribute parallel for simd order(reproducible:concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute parallel for simd'}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}}1010 for (int i = 0; i < 10; ++i)1011 ;1012#pragma omp distribute parallel for simd order(unconstrained:concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute parallel for simd'}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}}1013 for (int i = 0; i < 10; ++i)1014 ;1015#pragma omp distribute parallel for simd order(concurrent) order(concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute parallel for simd'}} omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute parallel for simd'}} omp51-error {{directive '#pragma omp distribute parallel for simd' cannot contain more than one 'order' clause}}1016 for (int i = 0; i < 10; ++i)1017 ;1018}1019 1020