926 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 -fopenmp-version=51 -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 -fopenmp-version=51 -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 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 simd'}}17#pragma omp simd18 19// expected-error@+1 {{unexpected OpenMP directive '#pragma omp simd'}}20#pragma omp simd foo21 22// expected-error@+1 {{unexpected OpenMP directive '#pragma omp simd'}}23#pragma omp simd safelen(4)24 25void test_no_clause(void) {26 int i;27#pragma omp simd28 for (i = 0; i < 16; ++i)29 ;30 31// expected-error@+2 {{statement after '#pragma omp simd' must be a for loop}}32#pragma omp simd33 ++i;34}35 36void test_branch_protected_scope(void) {37 int i = 0;38L1:39 ++i;40 41 int x[24];42 43#pragma omp simd44 for (i = 0; i < 16; ++i) {45 if (i == 5)46 goto L1; // expected-error {{use of undeclared label 'L1'}}47 else if (i == 6)48 return; // expected-error {{cannot return from OpenMP region}}49 else if (i == 7)50 goto L2;51 else if (i == 8) {52 L2:53 x[i]++;54 }55 }56 57 if (x[0] == 0)58 goto L2; // expected-error {{use of undeclared label 'L2'}}59 else if (x[1] == 1)60 goto L1;61}62 63void test_invalid_clause(void) {64 int i;65// expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}}66#pragma omp simd foo bar67 for (i = 0; i < 16; ++i)68 ;69}70 71void test_non_identifiers(void) {72 int i, x;73 74// expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}}75#pragma omp simd;76 for (i = 0; i < 16; ++i)77 ;78// expected-error@+2 {{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp simd'}}79// expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}}80#pragma omp simd firstprivate(x);81 for (i = 0; i < 16; ++i)82 ;83 84// expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}}85#pragma omp simd private(x);86 for (i = 0; i < 16; ++i)87 ;88 89// expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}}90#pragma omp simd, private(x);91 for (i = 0; i < 16; ++i)92 ;93}94 95extern int foo(void);96void test_safelen(void) {97 int i;98// expected-error@+1 {{expected '('}}99#pragma omp simd safelen100 for (i = 0; i < 16; ++i)101 ;102// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}103#pragma omp simd safelen(104 for (i = 0; i < 16; ++i)105 ;106// expected-error@+1 {{expected expression}}107#pragma omp simd safelen()108 for (i = 0; i < 16; ++i)109 ;110// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}111#pragma omp simd safelen(,112 for (i = 0; i < 16; ++i)113 ;114// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}115#pragma omp simd safelen(, )116 for (i = 0; i < 16; ++i)117 ;118// expected-warning@+2 {{extra tokens at the end of '#pragma omp simd' are ignored}}119// expected-error@+1 {{expected '('}}120#pragma omp simd safelen 4)121 for (i = 0; i < 16; ++i)122 ;123// expected-error@+2 {{expected ')'}}124// expected-note@+1 {{to match this '('}}125#pragma omp simd safelen(4126 for (i = 0; i < 16; ++i)127 ;128// expected-error@+2 {{expected ')'}}129// expected-note@+1 {{to match this '('}}130#pragma omp simd safelen(4,131 for (i = 0; i < 16; ++i)132 ;133// expected-error@+2 {{expected ')'}}134// expected-note@+1 {{to match this '('}}135#pragma omp simd safelen(4, )136 for (i = 0; i < 16; ++i)137 ;138// xxpected-error@+1 {{expected expression}}139#pragma omp simd safelen(4)140 for (i = 0; i < 16; ++i)141 ;142// expected-error@+2 {{expected ')'}}143// expected-note@+1 {{to match this '('}}144#pragma omp simd safelen(4 4)145 for (i = 0; i < 16; ++i)146 ;147// expected-error@+2 {{expected ')'}}148// expected-note@+1 {{to match this '('}}149#pragma omp simd safelen(4, , 4)150 for (i = 0; i < 16; ++i)151 ;152#pragma omp simd safelen(4)153 for (i = 0; i < 16; ++i)154 ;155// expected-error@+2 {{expected ')'}}156// expected-note@+1 {{to match this '('}}157#pragma omp simd safelen(4, 8)158 for (i = 0; i < 16; ++i)159 ;160// expected-error@+1 {{integer constant expression}}161#pragma omp simd safelen(2.5)162 for (i = 0; i < 16; ++i)163 ;164// expected-error@+1 {{integer constant expression}}165#pragma omp simd safelen(foo())166 for (i = 0; i < 16; ++i)167 ;168// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}169#pragma omp simd safelen(-5)170 for (i = 0; i < 16; ++i)171 ;172// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}173#pragma omp simd safelen(0)174 for (i = 0; i < 16; ++i)175 ;176// expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}177#pragma omp simd safelen(5 - 5)178 for (i = 0; i < 16; ++i)179 ;180}181 182void test_simdlen(void) {183 int i;184// expected-error@+1 {{expected '('}}185#pragma omp simd simdlen186 for (i = 0; i < 16; ++i)187 ;188// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}189#pragma omp simd simdlen(190 for (i = 0; i < 16; ++i)191 ;192// expected-error@+1 {{expected expression}}193#pragma omp simd simdlen()194 for (i = 0; i < 16; ++i)195 ;196// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}197#pragma omp simd simdlen(,198 for (i = 0; i < 16; ++i)199 ;200// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}201#pragma omp simd simdlen(, )202 for (i = 0; i < 16; ++i)203 ;204// expected-warning@+2 {{extra tokens at the end of '#pragma omp simd' are ignored}}205// expected-error@+1 {{expected '('}}206#pragma omp simd simdlen 4)207 for (i = 0; i < 16; ++i)208 ;209// expected-error@+2 {{expected ')'}}210// expected-note@+1 {{to match this '('}}211#pragma omp simd simdlen(4212 for (i = 0; i < 16; ++i)213 ;214// expected-error@+2 {{expected ')'}}215// expected-note@+1 {{to match this '('}}216#pragma omp simd simdlen(4,217 for (i = 0; i < 16; ++i)218 ;219// expected-error@+2 {{expected ')'}}220// expected-note@+1 {{to match this '('}}221#pragma omp simd simdlen(4, )222 for (i = 0; i < 16; ++i)223 ;224#pragma omp simd simdlen(4)225 for (i = 0; i < 16; ++i)226 ;227// expected-error@+2 {{expected ')'}}228// expected-note@+1 {{to match this '('}}229#pragma omp simd simdlen(4 4)230 for (i = 0; i < 16; ++i)231 ;232// expected-error@+2 {{expected ')'}}233// expected-note@+1 {{to match this '('}}234#pragma omp simd simdlen(4, , 4)235 for (i = 0; i < 16; ++i)236 ;237#pragma omp simd simdlen(4)238 for (i = 0; i < 16; ++i)239 ;240// expected-error@+2 {{expected ')'}}241// expected-note@+1 {{to match this '('}}242#pragma omp simd simdlen(4, 8)243 for (i = 0; i < 16; ++i)244 ;245// expected-error@+1 {{integer constant expression}}246#pragma omp simd simdlen(2.5)247 for (i = 0; i < 16; ++i)248 ;249// expected-error@+1 {{integer constant expression}}250#pragma omp simd simdlen(foo())251 for (i = 0; i < 16; ++i)252 ;253// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}254#pragma omp simd simdlen(-5)255 for (i = 0; i < 16; ++i)256 ;257// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}258#pragma omp simd simdlen(0)259 for (i = 0; i < 16; ++i)260 ;261// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}262#pragma omp simd simdlen(5 - 5)263 for (i = 0; i < 16; ++i)264 ;265}266 267void test_safelen_simdlen(void) {268 int i;269// expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}270#pragma omp simd simdlen(6) safelen(5)271 for (i = 0; i < 16; ++i)272 ;273// expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}274#pragma omp simd safelen(5) simdlen(6)275 for (i = 0; i < 16; ++i)276 ;277}278 279void test_collapse(void) {280 int i;281// expected-error@+1 {{expected '('}}282#pragma omp simd collapse283 for (i = 0; i < 16; ++i)284 ;285// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}286#pragma omp simd collapse(287 for (i = 0; i < 16; ++i)288 ;289// expected-error@+1 {{expected expression}}290#pragma omp simd collapse()291 for (i = 0; i < 16; ++i)292 ;293// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}294#pragma omp simd collapse(,295 for (i = 0; i < 16; ++i)296 ;297// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}298#pragma omp simd collapse(, )299 for (i = 0; i < 16; ++i)300 ;301// expected-warning@+2 {{extra tokens at the end of '#pragma omp simd' are ignored}}302// expected-error@+1 {{expected '('}}303#pragma omp simd collapse 4)304 for (i = 0; i < 16; ++i)305 ;306// expected-error@+2 {{expected ')'}}307// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}308#pragma omp simd collapse(4309 for (i = 0; i < 16; ++i)310 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}311// expected-error@+2 {{expected ')'}}312// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}313#pragma omp simd collapse(4,314 for (i = 0; i < 16; ++i)315 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}316// expected-error@+2 {{expected ')'}}317// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}318#pragma omp simd collapse(4, )319 for (i = 0; i < 16; ++i)320 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}321// xxpected-error@+1 {{expected expression}} expected-note@+1 {{as specified in 'collapse' clause}}322#pragma omp simd collapse(4)323 for (i = 0; i < 16; ++i)324 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}325// expected-error@+2 {{expected ')'}}326// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}327#pragma omp simd collapse(4 4)328 for (i = 0; i < 16; ++i)329 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}330// expected-error@+2 {{expected ')'}}331// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}332#pragma omp simd collapse(4, , 4)333 for (i = 0; i < 16; ++i)334 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}335#pragma omp simd collapse(4)336 for (int i1 = 0; i1 < 16; ++i1)337 for (int i2 = 0; i2 < 16; ++i2)338 for (int i3 = 0; i3 < 16; ++i3)339 for (int i4 = 0; i4 < 16; ++i4)340 foo();341// expected-error@+2 {{expected ')'}}342// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}343#pragma omp simd collapse(4, 8)344 for (i = 0; i < 16; ++i)345 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}346// expected-error@+1 {{integer constant expression}}347#pragma omp simd collapse(2.5)348 for (i = 0; i < 16; ++i)349 ;350// expected-error@+1 {{integer constant expression}}351#pragma omp simd collapse(foo())352 for (i = 0; i < 16; ++i)353 ;354// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}355#pragma omp simd collapse(-5)356 for (i = 0; i < 16; ++i)357 ;358// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}359#pragma omp simd collapse(0)360 for (i = 0; i < 16; ++i)361 ;362// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}363#pragma omp simd collapse(5 - 5)364 for (i = 0; i < 16; ++i)365 ;366// expected-note@+2 2 {{defined as reduction}}367#pragma omp parallel368#pragma omp simd collapse(2) reduction(+ : i)369 for (i = 0; i < 16; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp simd' directive may not be reduction, predetermined as lastprivate}}370 // 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?}}371 for (int j = 0; j < 16; ++j)372// expected-error@+2 2 {{reduction variable must be shared}}373// expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}}374#pragma omp for reduction(+ : i, j)375 for (int k = 0; k < 16; ++k)376 i += j;377#pragma omp parallel378#pragma omp for379 for (i = 0; i < 16; ++i)380 for (int j = 0; j < 16; ++j)381#pragma omp simd reduction(+ : i, j)382 for (int k = 0; k < 16; ++k)383 i += j;384}385 386void test_linear(void) {387 int i;388// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}389#pragma omp simd linear(390 for (i = 0; i < 16; ++i)391 ;392// expected-error@+2 {{expected expression}}393// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}394#pragma omp simd linear(,395 for (i = 0; i < 16; ++i)396 ;397// expected-error@+2 {{expected expression}}398// expected-error@+1 {{expected expression}}399#pragma omp simd linear(, )400 for (i = 0; i < 16; ++i)401 ;402// expected-error@+1 {{expected expression}}403#pragma omp simd linear()404 for (i = 0; i < 16; ++i)405 ;406// expected-error@+1 {{expected expression}}407#pragma omp simd linear(int)408 for (i = 0; i < 16; ++i)409 ;410// expected-error@+1 {{expected variable name}}411#pragma omp simd linear(0)412 for (i = 0; i < 16; ++i)413 ;414// expected-error@+1 {{use of undeclared identifier 'x'}}415#pragma omp simd linear(x)416 for (i = 0; i < 16; ++i)417 ;418// expected-error@+2 {{use of undeclared identifier 'x'}}419// expected-error@+1 {{use of undeclared identifier 'y'}}420#pragma omp simd linear(x, y)421 for (i = 0; i < 16; ++i)422 ;423// expected-error@+3 {{use of undeclared identifier 'x'}}424// expected-error@+2 {{use of undeclared identifier 'y'}}425// expected-error@+1 {{use of undeclared identifier 'z'}}426#pragma omp simd linear(x, y, z)427 for (i = 0; i < 16; ++i)428 ;429 430 int x, y;431// expected-error@+1 {{expected expression}}432#pragma omp simd linear(x :)433 for (i = 0; i < 16; ++i)434 ;435// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}436#pragma omp simd linear(x :, )437 for (i = 0; i < 16; ++i)438 ;439#pragma omp simd linear(x : 1)440 for (i = 0; i < 16; ++i)441 ;442#pragma omp simd linear(x : 2 * 2)443 for (i = 0; i < 16; ++i)444 ;445// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}446#pragma omp simd linear(x : 1, y)447 for (i = 0; i < 16; ++i)448 ;449// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}450#pragma omp simd linear(x : 1, y, z : 1)451 for (i = 0; i < 16; ++i)452 ;453 454// expected-note@+2 {{defined as linear}}455// expected-error@+1 {{linear variable cannot be linear}}456#pragma omp simd linear(x) linear(x)457 for (i = 0; i < 16; ++i)458 ;459 460// expected-note@+2 {{defined as private}}461// expected-error@+1 {{private variable cannot be linear}}462#pragma omp simd private(x) linear(x)463 for (i = 0; i < 16; ++i)464 ;465 466// expected-note@+2 {{defined as linear}}467// expected-error@+1 {{linear variable cannot be private}}468#pragma omp simd linear(x) private(x)469 for (i = 0; i < 16; ++i)470 ;471 472// expected-warning@+1 {{zero linear step ('x' and other variables in clause should probably be const)}}473#pragma omp simd linear(x, y : 0)474 for (i = 0; i < 16; ++i)475 ;476 477// expected-note@+2 {{defined as linear}}478// expected-error@+1 {{linear variable cannot be lastprivate}}479#pragma omp simd linear(x) lastprivate(x)480 for (i = 0; i < 16; ++i)481 ;482 483// expected-note@+2 {{defined as lastprivate}}484// expected-error@+1 {{lastprivate variable cannot be linear}}485#pragma omp simd lastprivate(x) linear(x)486 for (i = 0; i < 16; ++i)487 ;488}489 490void test_aligned(void) {491 int i;492// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}493#pragma omp simd aligned(494 for (i = 0; i < 16; ++i)495 ;496// expected-error@+2 {{expected expression}}497// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}498#pragma omp simd aligned(,499 for (i = 0; i < 16; ++i)500 ;501// expected-error@+2 {{expected expression}}502// expected-error@+1 {{expected expression}}503#pragma omp simd aligned(, )504 for (i = 0; i < 16; ++i)505 ;506// expected-error@+1 {{expected expression}}507#pragma omp simd aligned()508 for (i = 0; i < 16; ++i)509 ;510// expected-error@+1 {{expected expression}}511#pragma omp simd aligned(int)512 for (i = 0; i < 16; ++i)513 ;514// expected-error@+1 {{expected variable name}}515#pragma omp simd aligned(0)516 for (i = 0; i < 16; ++i)517 ;518// expected-error@+1 {{use of undeclared identifier 'x'}}519#pragma omp simd aligned(x)520 for (i = 0; i < 16; ++i)521 ;522// expected-error@+2 {{use of undeclared identifier 'x'}}523// expected-error@+1 {{use of undeclared identifier 'y'}}524#pragma omp simd aligned(x, y)525 for (i = 0; i < 16; ++i)526 ;527// expected-error@+3 {{use of undeclared identifier 'x'}}528// expected-error@+2 {{use of undeclared identifier 'y'}}529// expected-error@+1 {{use of undeclared identifier 'z'}}530#pragma omp simd aligned(x, y, z)531 for (i = 0; i < 16; ++i)532 ;533 534 int *x, y, z[25]; // expected-note 4 {{'y' defined here}}535#pragma omp simd aligned(x)536 for (i = 0; i < 16; ++i)537 ;538#pragma omp simd aligned(z)539 for (i = 0; i < 16; ++i)540 ;541// expected-error@+1 {{expected expression}}542#pragma omp simd aligned(x :)543 for (i = 0; i < 16; ++i)544 ;545// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}546#pragma omp simd aligned(x :, )547 for (i = 0; i < 16; ++i)548 ;549#pragma omp simd aligned(x : 1)550 for (i = 0; i < 16; ++i)551 ;552#pragma omp simd aligned(x : 2 * 2)553 for (i = 0; i < 16; ++i)554 ;555// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}556#pragma omp simd aligned(x : 1, y)557 for (i = 0; i < 16; ++i)558 ;559// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}560#pragma omp simd aligned(x : 1, y, z : 1)561 for (i = 0; i < 16; ++i)562 ;563 564// expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}565#pragma omp simd aligned(x, y)566 for (i = 0; i < 16; ++i)567 ;568// expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}569#pragma omp simd aligned(x, y, z)570 for (i = 0; i < 16; ++i)571 ;572 573// expected-note@+2 {{defined as aligned}}574// expected-error@+1 {{a variable cannot appear in more than one aligned clause}}575#pragma omp simd aligned(x) aligned(z, x)576 for (i = 0; i < 16; ++i)577 ;578 579// expected-note@+3 {{defined as aligned}}580// expected-error@+2 {{a variable cannot appear in more than one aligned clause}}581// expected-error@+1 2 {{argument of aligned clause should be array or pointer, not 'int'}}582#pragma omp simd aligned(x, y, z) aligned(y, z)583 for (i = 0; i < 16; ++i)584 ;585}586 587void test_private(void) {588 int i;589// expected-error@+2 {{expected expression}}590// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}591#pragma omp simd private(592 for (i = 0; i < 16; ++i)593 ;594// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}595// expected-error@+1 2 {{expected expression}}596#pragma omp simd private(,597 for (i = 0; i < 16; ++i)598 ;599// expected-error@+1 2 {{expected expression}}600#pragma omp simd private(, )601 for (i = 0; i < 16; ++i)602 ;603// expected-error@+1 {{expected expression}}604#pragma omp simd private()605 for (i = 0; i < 16; ++i)606 ;607// expected-error@+1 {{expected expression}}608#pragma omp simd private(int)609 for (i = 0; i < 16; ++i)610 ;611// expected-error@+1 {{expected variable name}}612#pragma omp simd private(0)613 for (i = 0; i < 16; ++i)614 ;615 616 int x, y, z;617#pragma omp simd private(x)618 for (i = 0; i < 16; ++i)619 ;620#pragma omp simd private(x, y)621 for (i = 0; i < 16; ++i)622 ;623#pragma omp simd private(x, y, z)624 for (i = 0; i < 16; ++i) {625 x = y * i + z;626 }627}628 629void test_firstprivate(void) {630 int i;631// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}632// expected-error@+2 {{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp simd'}}633// expected-error@+1 {{expected expression}}634#pragma omp simd firstprivate(635 for (i = 0; i < 16; ++i)636 ;637}638 639void test_lastprivate(void) {640 int i;641// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}642// expected-error@+1 {{expected expression}}643#pragma omp simd lastprivate(644 for (i = 0; i < 16; ++i)645 ;646 647// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}648// expected-error@+1 2 {{expected expression}}649#pragma omp simd lastprivate(,650 for (i = 0; i < 16; ++i)651 ;652// expected-error@+1 2 {{expected expression}}653#pragma omp simd lastprivate(, )654 for (i = 0; i < 16; ++i)655 ;656// expected-error@+1 {{expected expression}}657#pragma omp simd lastprivate()658 for (i = 0; i < 16; ++i)659 ;660// expected-error@+1 {{expected expression}}661#pragma omp simd lastprivate(int)662 for (i = 0; i < 16; ++i)663 ;664// expected-error@+1 {{expected variable name}}665#pragma omp simd lastprivate(0)666 for (i = 0; i < 16; ++i)667 ;668 669 int x, y, z;670#pragma omp simd lastprivate(x)671 for (i = 0; i < 16; ++i)672 ;673#pragma omp simd lastprivate(x, y)674 for (i = 0; i < 16; ++i)675 ;676#pragma omp simd lastprivate(x, y, z)677 for (i = 0; i < 16; ++i)678 ;679}680 681void test_reduction(void) {682 int i, x, y;683// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}684// expected-error@+2 {{expected identifier}}685// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}686#pragma omp simd reduction(687 for (i = 0; i < 16; ++i)688 ;689// expected-error@+2 {{expected identifier}}690// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}691#pragma omp simd reduction()692 for (i = 0; i < 16; ++i)693 ;694// expected-error@+2 {{expected expression}}695// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}696#pragma omp simd reduction(x)697 for (i = 0; i < 16; ++i)698 ;699// expected-error@+1 {{expected identifier}}700#pragma omp simd reduction( : x)701 for (i = 0; i < 16; ++i)702 ;703// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}704// expected-error@+2 {{expected identifier}}705// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}706#pragma omp simd reduction(,707 for (i = 0; i < 16; ++i)708 ;709// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}710// expected-error@+2 {{expected expression}}711// expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}712#pragma omp simd reduction(+713 for (i = 0; i < 16; ++i)714 ;715 716// expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}717//718// expected-error@+1 {{expected expression}}719#pragma omp simd reduction(+:720 for (i = 0; i < 16; ++i)721 ;722// expected-error@+1 {{expected expression}}723#pragma omp simd reduction(+ :)724 for (i = 0; i < 16; ++i)725 ;726// expected-error@+1 {{expected expression}}727#pragma omp simd reduction(+ :, y)728 for (i = 0; i < 16; ++i)729 ;730// expected-error@+1 {{expected expression}}731#pragma omp simd reduction(+ : x, + : y)732 for (i = 0; i < 16; ++i)733 ;734// expected-error@+1 {{expected identifier}}735#pragma omp simd reduction(% : x)736 for (i = 0; i < 16; ++i)737 ;738 739#pragma omp simd reduction(+ : x)740 for (i = 0; i < 16; ++i)741 ;742#pragma omp simd reduction(* : x)743 for (i = 0; i < 16; ++i)744 ;745#pragma omp simd reduction(- : x)746 for (i = 0; i < 16; ++i)747 ;748#pragma omp simd reduction(& : x)749 for (i = 0; i < 16; ++i)750 ;751#pragma omp simd reduction(| : x)752 for (i = 0; i < 16; ++i)753 ;754#pragma omp simd reduction(^ : x)755 for (i = 0; i < 16; ++i)756 ;757#pragma omp simd reduction(&& : x)758 for (i = 0; i < 16; ++i)759 ;760#pragma omp simd reduction(|| : x)761 for (i = 0; i < 16; ++i)762 ;763#pragma omp simd reduction(max : x)764 for (i = 0; i < 16; ++i)765 ;766#pragma omp simd reduction(min : x)767 for (i = 0; i < 16; ++i)768 ;769 struct X {770 int x;771 };772 struct X X;773// expected-error@+1 {{expected variable name}}774#pragma omp simd reduction(+ : X.x)775 for (i = 0; i < 16; ++i)776 ;777// expected-error@+1 {{expected variable name}}778#pragma omp simd reduction(+ : x + x)779 for (i = 0; i < 16; ++i)780 ;781}782 783void test_loop_messages(void) {784 float a[100], b[100], c[100];785// expected-error@+2 {{variable must be of integer or pointer type}}786#pragma omp simd787 for (float fi = 0; fi < 10.0; fi++) {788 c[(int)fi] = a[(int)fi] + b[(int)fi];789 }790// expected-error@+2 {{variable must be of integer or pointer type}}791#pragma omp simd792 for (double fi = 0; fi < 10.0; fi++) {793 c[(int)fi] = a[(int)fi] + b[(int)fi];794 }795}796 797void linear_modifiers(int argc) {798 int f;799 #pragma omp simd linear(f)800 for (int k = 0; k < argc; ++k) ++k;801 #pragma omp simd linear(val(f))802 for (int k = 0; k < argc; ++k) ++k;803 #pragma omp simd linear(uval(f)) // expected-error {{expected 'val' modifier}}804 for (int k = 0; k < argc; ++k) ++k;805 #pragma omp simd linear(ref(f)) // expected-error {{expected 'val' modifier}}806 for (int k = 0; k < argc; ++k) ++k;807 #pragma omp simd linear(foo(f)) // expected-error {{expected 'val' modifier}}808 for (int k = 0; k < argc; ++k) ++k;809}810 811void test_nontemporal(void) {812 int i;813// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}} expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}814#pragma omp simd nontemporal(815 for (i = 0; i < 16; ++i)816 ;817// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}} expected-error@+1 2 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}818#pragma omp simd nontemporal(,819 for (i = 0; i < 16; ++i)820 ;821// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}} expected-error@+1 2 {{expected expression}}822#pragma omp simd nontemporal(, )823 for (i = 0; i < 16; ++i)824 ;825// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}} expected-error@+1 {{expected expression}}826#pragma omp simd nontemporal()827 for (i = 0; i < 16; ++i)828 ;829// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}} expected-error@+1 {{expected expression}}830#pragma omp simd nontemporal(int)831 for (i = 0; i < 16; ++i)832 ;833// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}} omp50-error@+1 {{expected variable name}} omp51-error@+1 {{expected variable name}}834#pragma omp simd nontemporal(0)835 for (i = 0; i < 16; ++i)836 ;837// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}} expected-error@+1 {{use of undeclared identifier 'x'}}838#pragma omp simd nontemporal(x)839 for (i = 0; i < 16; ++i)840 ;841// expected-error@+2 {{use of undeclared identifier 'x'}}842// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}} expected-error@+1 {{use of undeclared identifier 'y'}}843#pragma omp simd nontemporal(x, y)844 for (i = 0; i < 16; ++i)845 ;846// expected-error@+3 {{use of undeclared identifier 'x'}}847// expected-error@+2 {{use of undeclared identifier 'y'}}848// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}} expected-error@+1 {{use of undeclared identifier 'z'}}849#pragma omp simd nontemporal(x, y, z)850 for (i = 0; i < 16; ++i)851 ;852 853 int x, y;854// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}855#pragma omp simd nontemporal(x :)856 for (i = 0; i < 16; ++i)857 ;858// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}}859#pragma omp simd nontemporal(x :, )860 for (i = 0; i < 16; ++i)861 ;862 863// omp51-note@+3 {{defined as nontemporal}}864// omp50-note@+2 {{defined as nontemporal}}865// omp45-error@+1 2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp 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}}866#pragma omp simd nontemporal(x) nontemporal(x)867 for (i = 0; i < 16; ++i)868 ;869 870// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}}871#pragma omp simd private(x) nontemporal(x)872 for (i = 0; i < 16; ++i)873 ;874 875// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}}876#pragma omp simd nontemporal(x) private(x)877 for (i = 0; i < 16; ++i)878 ;879 880// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}} expected-note@+1 {{to match this '('}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}}881#pragma omp simd nontemporal(x, y : 0)882 for (i = 0; i < 16; ++i)883 ;884 885// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}}886#pragma omp simd nontemporal(x) lastprivate(x)887 for (i = 0; i < 16; ++i)888 ;889 890// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp simd'}}891#pragma omp simd lastprivate(x) nontemporal(x)892 for (i = 0; i < 16; ++i)893 ;894#pragma omp simd order // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp simd'}} expected-error {{expected '(' after 'order'}}895 for (int i = 0; i < 10; ++i)896 ;897#pragma omp simd order( // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp 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'}}898 for (int i = 0; i < 10; ++i)899 ;900#pragma omp simd order(none // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp 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'}}901 for (int i = 0; i < 10; ++i)902 ;903#pragma omp simd order(concurrent // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp simd'}} expected-error {{expected ')'}} expected-note {{to match this '('}}904 for (int i = 0; i < 10; ++i)905 ;906#pragma omp simd order(concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp simd'}}907 for (int i = 0; i < 10; ++i)908 ;909#pragma omp simd order(unconstrained:) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp simd'}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}} omp51-error {{expected 'concurrent' in OpenMP clause 'order'}}910 for (int i = 0; i < 10; ++i)911 ;912#pragma omp simd order(reproducible:concurrent // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp simd'}} expected-error {{expected ')'}} expected-note {{to match this '('}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}}913 for (int i = 0; i < 10; ++i)914 ;915#pragma omp simd order(reproducible:concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp simd'}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}}916 for (int i = 0; i < 10; ++i)917 ;918#pragma omp simd order(unconstrained:concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp simd'}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}}919 for (int i = 0; i < 10; ++i)920 ;921#pragma omp simd order(concurrent) order(concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp simd'}} omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp simd'}} omp51-error {{directive '#pragma omp simd' cannot contain more than one 'order' clause}}922 for (int i = 0; i < 10; ++i)923 ;924}925 926