472 lines · c
1// RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -verify=expected,omp45 -triple x86_64-unknown-unknown %s -Wuninitialized2// RUN: %clang_cc1 -fsyntax-only -fopenmp -verify=expected,omp50 -triple x86_64-unknown-unknown %s -Wuninitialized3 4// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=45 -verify=expected,omp45 -triple x86_64-unknown-unknown %s -Wuninitialized5// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify=expected,omp50 -triple x86_64-unknown-unknown %s -Wuninitialized6 7void xxx(int argc) {8 int x; // expected-note {{initialize the variable 'x' to silence this warning}}9#pragma omp master taskloop simd10 for (int i = 0; i < 10; ++i)11 argc = x; // expected-warning {{variable 'x' is uninitialized when used here}}12}13 14// expected-error@+1 {{unexpected OpenMP directive '#pragma omp master taskloop simd'}}15#pragma omp master taskloop simd16 17// expected-error@+1 {{unexpected OpenMP directive '#pragma omp master taskloop simd'}}18#pragma omp master taskloop simd foo19 20void test_no_clause(void) {21 int i;22#pragma omp master taskloop simd23 for (i = 0; i < 16; ++i)24 ;25 26// expected-error@+2 {{statement after '#pragma omp master taskloop simd' must be a for loop}}27#pragma omp master taskloop simd28 ++i;29}30 31void test_branch_protected_scope(void) {32 int i = 0;33L1:34 ++i;35 36 int x[24];37 38#pragma omp parallel39#pragma omp master taskloop simd40 for (i = 0; i < 16; ++i) {41 if (i == 5)42 goto L1; // expected-error {{use of undeclared label 'L1'}}43 else if (i == 6)44 return; // expected-error {{cannot return from OpenMP region}}45 else if (i == 7)46 goto L2;47 else if (i == 8) {48 L2:49 x[i]++;50 }51 }52 53 if (x[0] == 0)54 goto L2; // expected-error {{use of undeclared label 'L2'}}55 else if (x[1] == 1)56 goto L1;57}58 59void test_invalid_clause(void) {60 int i;61#pragma omp parallel62// expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop simd' are ignored}}63#pragma omp master taskloop simd foo bar64 for (i = 0; i < 16; ++i)65 ;66// expected-error@+1 {{directive '#pragma omp master taskloop simd' cannot contain more than one 'nogroup' clause}}67#pragma omp master taskloop simd nogroup nogroup68 for (i = 0; i < 16; ++i)69 ;70}71 72void test_non_identifiers(void) {73 int i, x;74 75#pragma omp parallel76// expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop simd' are ignored}}77#pragma omp master taskloop simd;78 for (i = 0; i < 16; ++i)79 ;80// expected-warning@+2 {{extra tokens at the end of '#pragma omp master taskloop simd' are ignored}}81#pragma omp parallel82#pragma omp master taskloop simd linear(x);83 for (i = 0; i < 16; ++i)84 ;85 86#pragma omp parallel87// expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop simd' are ignored}}88#pragma omp master taskloop simd private(x);89 for (i = 0; i < 16; ++i)90 ;91 92#pragma omp parallel93// expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop simd' are ignored}}94#pragma omp master taskloop simd, private(x);95 for (i = 0; i < 16; ++i)96 ;97}98 99extern int foo(void);100 101void test_collapse(void) {102 int i;103#pragma omp parallel104// expected-error@+1 {{expected '('}}105#pragma omp master taskloop simd collapse106 for (i = 0; i < 16; ++i)107 ;108#pragma omp parallel109// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}110#pragma omp master taskloop simd collapse(111 for (i = 0; i < 16; ++i)112 ;113#pragma omp parallel114// expected-error@+1 {{expected expression}}115#pragma omp master taskloop simd collapse()116 for (i = 0; i < 16; ++i)117 ;118#pragma omp parallel119// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}120#pragma omp master taskloop simd collapse(,121 for (i = 0; i < 16; ++i)122 ;123#pragma omp parallel124// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}125#pragma omp master taskloop simd collapse(, )126 for (i = 0; i < 16; ++i)127 ;128#pragma omp parallel129// expected-warning@+2 {{extra tokens at the end of '#pragma omp master taskloop simd' are ignored}}130// expected-error@+1 {{expected '('}}131#pragma omp master taskloop simd collapse 4)132 for (i = 0; i < 16; ++i)133 ;134#pragma omp parallel135// expected-error@+2 {{expected ')'}}136// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}137#pragma omp master taskloop simd collapse(4138 for (i = 0; i < 16; ++i)139 ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop simd', but found only 1}}140#pragma omp parallel141// expected-error@+2 {{expected ')'}}142// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}143#pragma omp master taskloop simd collapse(4,144 for (i = 0; i < 16; ++i)145 ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop simd', but found only 1}}146#pragma omp parallel147// expected-error@+2 {{expected ')'}}148// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}149#pragma omp master taskloop simd collapse(4, )150 for (i = 0; i < 16; ++i)151 ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop simd', but found only 1}}152#pragma omp parallel153// expected-note@+1 {{as specified in 'collapse' clause}}154#pragma omp master taskloop simd collapse(4)155 for (i = 0; i < 16; ++i)156 ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop simd', but found only 1}}157#pragma omp parallel158// expected-error@+2 {{expected ')'}}159// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}160#pragma omp master taskloop simd collapse(4 4)161 for (i = 0; i < 16; ++i)162 ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop simd', but found only 1}}163#pragma omp parallel164// expected-error@+2 {{expected ')'}}165// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}166#pragma omp master taskloop simd collapse(4, , 4)167 for (i = 0; i < 16; ++i)168 ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop simd', but found only 1}}169#pragma omp parallel170#pragma omp master taskloop simd collapse(4)171 for (int i1 = 0; i1 < 16; ++i1)172 for (int i2 = 0; i2 < 16; ++i2)173 for (int i3 = 0; i3 < 16; ++i3)174 for (int i4 = 0; i4 < 16; ++i4)175 foo();176#pragma omp parallel177// expected-error@+2 {{expected ')'}}178// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}179#pragma omp master taskloop simd collapse(4, 8)180 for (i = 0; i < 16; ++i)181 ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop simd', but found only 1}}182#pragma omp parallel183// expected-error@+1 {{integer constant expression}}184#pragma omp master taskloop simd collapse(2.5)185 for (i = 0; i < 16; ++i)186 ;187#pragma omp parallel188// expected-error@+1 {{integer constant expression}}189#pragma omp master taskloop simd collapse(foo())190 for (i = 0; i < 16; ++i)191 ;192#pragma omp parallel193// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}194#pragma omp master taskloop simd collapse(-5)195 for (i = 0; i < 16; ++i)196 ;197#pragma omp parallel198// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}199#pragma omp master taskloop simd collapse(0)200 for (i = 0; i < 16; ++i)201 ;202#pragma omp parallel203// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}204#pragma omp master taskloop simd collapse(5 - 5)205 for (i = 0; i < 16; ++i)206 ;207}208 209void test_private(void) {210 int i;211#pragma omp parallel212// expected-error@+2 {{expected expression}}213// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}214#pragma omp master taskloop simd private(215 for (i = 0; i < 16; ++i)216 ;217#pragma omp parallel218// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}219// expected-error@+1 2 {{expected expression}}220#pragma omp master taskloop simd private(,221 for (i = 0; i < 16; ++i)222 ;223#pragma omp parallel224// expected-error@+1 2 {{expected expression}}225#pragma omp master taskloop simd private(, )226 for (i = 0; i < 16; ++i)227 ;228#pragma omp parallel229// expected-error@+1 {{expected expression}}230#pragma omp master taskloop simd private()231 for (i = 0; i < 16; ++i)232 ;233#pragma omp parallel234// expected-error@+1 {{expected expression}}235#pragma omp master taskloop simd private(int)236 for (i = 0; i < 16; ++i)237 ;238#pragma omp parallel239// expected-error@+1 {{expected variable name}}240#pragma omp master taskloop simd private(0)241 for (i = 0; i < 16; ++i)242 ;243 244 int x, y, z;245#pragma omp parallel246#pragma omp master taskloop simd private(x)247 for (i = 0; i < 16; ++i)248 ;249#pragma omp parallel250#pragma omp master taskloop simd private(x, y)251 for (i = 0; i < 16; ++i)252 ;253#pragma omp parallel254#pragma omp master taskloop simd private(x, y, z)255 for (i = 0; i < 16; ++i) {256 x = y * i + z;257 }258}259 260void test_lastprivate(void) {261 int i;262#pragma omp parallel263// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}264// expected-error@+1 {{expected expression}}265#pragma omp master taskloop simd lastprivate(266 for (i = 0; i < 16; ++i)267 ;268 269#pragma omp parallel270// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}271// expected-error@+1 2 {{expected expression}}272#pragma omp master taskloop simd lastprivate(,273 for (i = 0; i < 16; ++i)274 ;275#pragma omp parallel276// expected-error@+1 2 {{expected expression}}277#pragma omp master taskloop simd lastprivate(, )278 for (i = 0; i < 16; ++i)279 ;280#pragma omp parallel281// expected-error@+1 {{expected expression}}282#pragma omp master taskloop simd lastprivate()283 for (i = 0; i < 16; ++i)284 ;285#pragma omp parallel286// expected-error@+1 {{expected expression}}287#pragma omp master taskloop simd lastprivate(int)288 for (i = 0; i < 16; ++i)289 ;290#pragma omp parallel291// expected-error@+1 {{expected variable name}}292#pragma omp master taskloop simd lastprivate(0)293 for (i = 0; i < 16; ++i)294 ;295 296 int x, y, z;297#pragma omp parallel298#pragma omp master taskloop simd lastprivate(x)299 for (i = 0; i < 16; ++i)300 ;301#pragma omp parallel302#pragma omp master taskloop simd lastprivate(x, y)303 for (i = 0; i < 16; ++i)304 ;305#pragma omp parallel306#pragma omp master taskloop simd lastprivate(x, y, z)307 for (i = 0; i < 16; ++i)308 ;309}310 311void test_firstprivate(void) {312 int i;313#pragma omp parallel314// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}315// expected-error@+1 {{expected expression}}316#pragma omp master taskloop simd firstprivate(317 for (i = 0; i < 16; ++i)318 ;319 320#pragma omp parallel321// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}322// expected-error@+1 2 {{expected expression}}323#pragma omp master taskloop simd firstprivate(,324 for (i = 0; i < 16; ++i)325 ;326#pragma omp parallel327// expected-error@+1 2 {{expected expression}}328#pragma omp master taskloop simd firstprivate(, )329 for (i = 0; i < 16; ++i)330 ;331#pragma omp parallel332// expected-error@+1 {{expected expression}}333#pragma omp master taskloop simd firstprivate()334 for (i = 0; i < 16; ++i)335 ;336#pragma omp parallel337// expected-error@+1 {{expected expression}}338#pragma omp master taskloop simd firstprivate(int)339 for (i = 0; i < 16; ++i)340 ;341#pragma omp parallel342// expected-error@+1 {{expected variable name}}343#pragma omp master taskloop simd firstprivate(0)344 for (i = 0; i < 16; ++i)345 ;346 347 int x, y, z;348#pragma omp parallel349#pragma omp master taskloop simd lastprivate(x) firstprivate(x)350 for (i = 0; i < 16; ++i)351 ;352#pragma omp parallel353#pragma omp master taskloop simd lastprivate(x, y) firstprivate(x, y)354 for (i = 0; i < 16; ++i)355 ;356#pragma omp parallel357#pragma omp master taskloop simd lastprivate(x, y, z) firstprivate(x, y, z)358 for (i = 0; i < 16; ++i)359 ;360// expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}361#pragma omp master taskloop simd simdlen(64) safelen(8)362 for (i = 0; i < 16; ++i)363 ;364}365 366void test_loop_messages(void) {367 float a[100], b[100], c[100];368#pragma omp parallel369// expected-error@+2 {{variable must be of integer or pointer type}}370#pragma omp master taskloop simd371 for (float fi = 0; fi < 10.0; fi++) {372 c[(int)fi] = a[(int)fi] + b[(int)fi];373 }374#pragma omp parallel375// expected-error@+2 {{variable must be of integer or pointer type}}376#pragma omp master taskloop simd377 for (double fi = 0; fi < 10.0; fi++) {378 c[(int)fi] = a[(int)fi] + b[(int)fi];379 }380 381 // expected-warning@+2 {{OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed}}382 #pragma omp master taskloop simd383 for (__int128 ii = 0; ii < 10; ii++) {384 c[ii] = a[ii] + b[ii];385 }386}387 388void test_nontemporal(void) {389 int i;390// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}391#pragma omp master taskloop simd nontemporal(392 for (i = 0; i < 16; ++i)393 ;394// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 2 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}395#pragma omp master taskloop simd nontemporal(,396 for (i = 0; i < 16; ++i)397 ;398// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 2 {{expected expression}}399#pragma omp master taskloop simd nontemporal(, )400 for (i = 0; i < 16; ++i)401 ;402// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{expected expression}}403#pragma omp master taskloop simd nontemporal()404 for (i = 0; i < 16; ++i)405 ;406// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{expected expression}}407#pragma omp master taskloop simd nontemporal(int)408 for (i = 0; i < 16; ++i)409 ;410// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} omp50-error@+1 {{expected variable name}}411#pragma omp master taskloop simd nontemporal(0)412 for (i = 0; i < 16; ++i)413 ;414// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{use of undeclared identifier 'x'}}415#pragma omp master taskloop simd nontemporal(x)416 for (i = 0; i < 16; ++i)417 ;418// expected-error@+2 {{use of undeclared identifier 'x'}}419// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{use of undeclared identifier 'y'}}420#pragma omp master taskloop simd nontemporal(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// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{use of undeclared identifier 'z'}}426#pragma omp master taskloop simd nontemporal(x, y, z)427 for (i = 0; i < 16; ++i)428 ;429 430 int x, y;431// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}432#pragma omp master taskloop simd nontemporal(x :)433 for (i = 0; i < 16; ++i)434 ;435// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}}436#pragma omp master taskloop simd nontemporal(x :, )437 for (i = 0; i < 16; ++i)438 ;439 440// omp50-note@+2 {{defined as nontemporal}}441// omp45-error@+1 2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} omp50-error@+1 {{a variable cannot appear in more than one nontemporal clause}}442#pragma omp master taskloop simd nontemporal(x) nontemporal(x)443 for (i = 0; i < 16; ++i)444 ;445 446// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}}447#pragma omp master taskloop simd private(x) nontemporal(x)448 for (i = 0; i < 16; ++i)449 ;450 451// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}}452#pragma omp master taskloop simd nontemporal(x) private(x)453 for (i = 0; i < 16; ++i)454 ;455 456// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-note@+1 {{to match this '('}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}}457#pragma omp master taskloop simd nontemporal(x, y : 0)458 for (i = 0; i < 16; ++i)459 ;460 461// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}}462#pragma omp master taskloop simd nontemporal(x) lastprivate(x)463 for (i = 0; i < 16; ++i)464 ;465 466// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}}467#pragma omp master taskloop simd lastprivate(x) nontemporal(x)468 for (i = 0; i < 16; ++i)469 ;470}471 472