386 lines · c
1// RUN: %clang_cc1 -fsyntax-only -fopenmp -triple x86_64-unknown-unknown -verify %s -Wuninitialized2 3// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -triple x86_64-unknown-unknown -verify %s -Wuninitialized4 5void xxx(int argc) {6 int x; // expected-note {{initialize the variable 'x' to silence this warning}}7#pragma omp parallel master taskloop8 for (int i = 0; i < 10; ++i)9 argc = x; // expected-warning {{variable 'x' is uninitialized when used here}}10}11 12// expected-error@+1 {{unexpected OpenMP directive '#pragma omp parallel master taskloop'}}13#pragma omp parallel master taskloop14 15// expected-error@+1 {{unexpected OpenMP directive '#pragma omp parallel master taskloop'}}16#pragma omp parallel master taskloop foo17 18void test_no_clause(void) {19 int i;20#pragma omp parallel master taskloop21 for (i = 0; i < 16; ++i)22 ;23 24// expected-error@+2 {{statement after '#pragma omp parallel master taskloop' must be a for loop}}25#pragma omp parallel master taskloop26 ++i;27}28 29void test_branch_protected_scope(void) {30 int i = 0;31L1:32 ++i;33 34 int x[24];35 36#pragma omp parallel37#pragma omp parallel master taskloop38 for (i = 0; i < 16; ++i) {39 if (i == 5)40 goto L1; // expected-error {{use of undeclared label 'L1'}}41 else if (i == 6)42 return; // expected-error {{cannot return from OpenMP region}}43 else if (i == 7)44 goto L2;45 else if (i == 8) {46 L2:47 x[i]++;48 }49 }50 51 if (x[0] == 0)52 goto L2; // expected-error {{use of undeclared label 'L2'}}53 else if (x[1] == 1)54 goto L1;55}56 57void test_invalid_clause(void) {58 int i, a;59// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel master taskloop' are ignored}}60#pragma omp parallel master taskloop foo bar61 for (i = 0; i < 16; ++i)62 ;63// expected-error@+1 {{directive '#pragma omp parallel master taskloop' cannot contain more than one 'nogroup' clause}}64#pragma omp parallel master taskloop nogroup nogroup65 for (i = 0; i < 16; ++i)66 ;67// expected-error@+1 {{unexpected OpenMP clause 'in_reduction' in directive '#pragma omp parallel master taskloop'}}68#pragma omp parallel master taskloop in_reduction(+:a)69 for (i = 0; i < 16; ++i)70 ;71}72 73void test_non_identifiers(void) {74 int i, x;75 76#pragma omp parallel77// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel master taskloop' are ignored}}78#pragma omp parallel master taskloop;79 for (i = 0; i < 16; ++i)80 ;81// expected-warning@+3 {{extra tokens at the end of '#pragma omp parallel master taskloop' are ignored}}82// expected-error@+2 {{unexpected OpenMP clause 'linear' in directive '#pragma omp parallel master taskloop'}}83#pragma omp parallel84#pragma omp parallel master taskloop linear(x);85 for (i = 0; i < 16; ++i)86 ;87 88#pragma omp parallel89// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel master taskloop' are ignored}}90#pragma omp parallel master taskloop private(x);91 for (i = 0; i < 16; ++i)92 ;93 94#pragma omp parallel95// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel master taskloop' are ignored}}96#pragma omp parallel master taskloop, private(x);97 for (i = 0; i < 16; ++i)98 ;99}100 101extern int foo(void);102 103void test_collapse(void) {104 int i;105#pragma omp parallel106// expected-error@+1 {{expected '('}}107#pragma omp parallel master taskloop collapse108 for (i = 0; i < 16; ++i)109 ;110#pragma omp parallel111// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}112#pragma omp parallel master taskloop collapse(113 for (i = 0; i < 16; ++i)114 ;115#pragma omp parallel116// expected-error@+1 {{expected expression}}117#pragma omp parallel master taskloop collapse()118 for (i = 0; i < 16; ++i)119 ;120#pragma omp parallel121// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}122#pragma omp parallel master taskloop collapse(,123 for (i = 0; i < 16; ++i)124 ;125#pragma omp parallel126// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}127#pragma omp parallel master taskloop collapse(, )128 for (i = 0; i < 16; ++i)129 ;130#pragma omp parallel131// expected-warning@+2 {{extra tokens at the end of '#pragma omp parallel master taskloop' are ignored}}132// expected-error@+1 {{expected '('}}133#pragma omp parallel master taskloop collapse 4)134 for (i = 0; i < 16; ++i)135 ;136#pragma omp parallel137// expected-error@+2 {{expected ')'}}138// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}139#pragma omp parallel master taskloop collapse(4140 for (i = 0; i < 16; ++i)141 ; // expected-error {{expected 4 for loops after '#pragma omp parallel master taskloop', but found only 1}}142#pragma omp parallel143// expected-error@+2 {{expected ')'}}144// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}145#pragma omp parallel master taskloop collapse(4,146 for (i = 0; i < 16; ++i)147 ; // expected-error {{expected 4 for loops after '#pragma omp parallel master taskloop', but found only 1}}148#pragma omp parallel149// expected-error@+2 {{expected ')'}}150// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}151#pragma omp parallel master taskloop collapse(4, )152 for (i = 0; i < 16; ++i)153 ; // expected-error {{expected 4 for loops after '#pragma omp parallel master taskloop', but found only 1}}154#pragma omp parallel155// expected-note@+1 {{as specified in 'collapse' clause}}156#pragma omp parallel master taskloop collapse(4)157 for (i = 0; i < 16; ++i)158 ; // expected-error {{expected 4 for loops after '#pragma omp parallel master taskloop', but found only 1}}159#pragma omp parallel160// expected-error@+2 {{expected ')'}}161// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}162#pragma omp parallel master taskloop collapse(4 4)163 for (i = 0; i < 16; ++i)164 ; // expected-error {{expected 4 for loops after '#pragma omp parallel master taskloop', but found only 1}}165#pragma omp parallel166// expected-error@+2 {{expected ')'}}167// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}168#pragma omp parallel master taskloop collapse(4, , 4)169 for (i = 0; i < 16; ++i)170 ; // expected-error {{expected 4 for loops after '#pragma omp parallel master taskloop', but found only 1}}171#pragma omp parallel172#pragma omp parallel master taskloop collapse(4)173 for (int i1 = 0; i1 < 16; ++i1)174 for (int i2 = 0; i2 < 16; ++i2)175 for (int i3 = 0; i3 < 16; ++i3)176 for (int i4 = 0; i4 < 16; ++i4)177 foo();178#pragma omp parallel179// expected-error@+2 {{expected ')'}}180// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}181#pragma omp parallel master taskloop collapse(4, 8)182 for (i = 0; i < 16; ++i)183 ; // expected-error {{expected 4 for loops after '#pragma omp parallel master taskloop', but found only 1}}184#pragma omp parallel185// expected-error@+1 {{integer constant expression}}186#pragma omp parallel master taskloop collapse(2.5)187 for (i = 0; i < 16; ++i)188 ;189#pragma omp parallel190// expected-error@+1 {{integer constant expression}}191#pragma omp parallel master taskloop collapse(foo())192 for (i = 0; i < 16; ++i)193 ;194#pragma omp parallel195// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}196#pragma omp parallel master taskloop collapse(-5)197 for (i = 0; i < 16; ++i)198 ;199#pragma omp parallel200// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}201#pragma omp parallel master taskloop collapse(0)202 for (i = 0; i < 16; ++i)203 ;204#pragma omp parallel205// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}206#pragma omp parallel master taskloop collapse(5 - 5)207 for (i = 0; i < 16; ++i)208 ;209}210 211void test_private(void) {212 int i;213#pragma omp parallel214// expected-error@+2 {{expected expression}}215// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}216#pragma omp parallel master taskloop private(217 for (i = 0; i < 16; ++i)218 ;219#pragma omp parallel220// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}221// expected-error@+1 2 {{expected expression}}222#pragma omp parallel master taskloop private(,223 for (i = 0; i < 16; ++i)224 ;225#pragma omp parallel226// expected-error@+1 2 {{expected expression}}227#pragma omp parallel master taskloop private(, )228 for (i = 0; i < 16; ++i)229 ;230#pragma omp parallel231// expected-error@+1 {{expected expression}}232#pragma omp parallel master taskloop private()233 for (i = 0; i < 16; ++i)234 ;235#pragma omp parallel236// expected-error@+1 {{expected expression}}237#pragma omp parallel master taskloop private(int)238 for (i = 0; i < 16; ++i)239 ;240#pragma omp parallel241// expected-error@+1 {{expected variable name}}242#pragma omp parallel master taskloop private(0)243 for (i = 0; i < 16; ++i)244 ;245 246 int x, y, z;247#pragma omp parallel248#pragma omp parallel master taskloop private(x)249 for (i = 0; i < 16; ++i)250 ;251#pragma omp parallel252#pragma omp parallel master taskloop private(x, y)253 for (i = 0; i < 16; ++i)254 ;255#pragma omp parallel256#pragma omp parallel master taskloop private(x, y, z)257 for (i = 0; i < 16; ++i) {258 x = y * i + z;259 }260}261 262void test_lastprivate(void) {263 int i;264#pragma omp parallel265// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}266// expected-error@+1 {{expected expression}}267#pragma omp parallel master taskloop lastprivate(268 for (i = 0; i < 16; ++i)269 ;270 271#pragma omp parallel272// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}273// expected-error@+1 2 {{expected expression}}274#pragma omp parallel master taskloop lastprivate(,275 for (i = 0; i < 16; ++i)276 ;277#pragma omp parallel278// expected-error@+1 2 {{expected expression}}279#pragma omp parallel master taskloop lastprivate(, )280 for (i = 0; i < 16; ++i)281 ;282#pragma omp parallel283// expected-error@+1 {{expected expression}}284#pragma omp parallel master taskloop lastprivate()285 for (i = 0; i < 16; ++i)286 ;287#pragma omp parallel288// expected-error@+1 {{expected expression}}289#pragma omp parallel master taskloop lastprivate(int)290 for (i = 0; i < 16; ++i)291 ;292#pragma omp parallel293// expected-error@+1 {{expected variable name}}294#pragma omp parallel master taskloop lastprivate(0)295 for (i = 0; i < 16; ++i)296 ;297 298 int x, y, z;299#pragma omp parallel300#pragma omp parallel master taskloop lastprivate(x)301 for (i = 0; i < 16; ++i)302 ;303#pragma omp parallel304#pragma omp parallel master taskloop lastprivate(x, y)305 for (i = 0; i < 16; ++i)306 ;307#pragma omp parallel308#pragma omp parallel master taskloop lastprivate(x, y, z)309 for (i = 0; i < 16; ++i)310 ;311}312 313void test_firstprivate(void) {314 int i;315#pragma omp parallel316// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}317// expected-error@+1 {{expected expression}}318#pragma omp parallel master taskloop firstprivate(319 for (i = 0; i < 16; ++i)320 ;321 322#pragma omp parallel323// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}324// expected-error@+1 2 {{expected expression}}325#pragma omp parallel master taskloop firstprivate(,326 for (i = 0; i < 16; ++i)327 ;328#pragma omp parallel329// expected-error@+1 2 {{expected expression}}330#pragma omp parallel master taskloop firstprivate(, )331 for (i = 0; i < 16; ++i)332 ;333#pragma omp parallel334// expected-error@+1 {{expected expression}}335#pragma omp parallel master taskloop firstprivate()336 for (i = 0; i < 16; ++i)337 ;338#pragma omp parallel339// expected-error@+1 {{expected expression}}340#pragma omp parallel master taskloop firstprivate(int)341 for (i = 0; i < 16; ++i)342 ;343#pragma omp parallel344// expected-error@+1 {{expected variable name}}345#pragma omp parallel master taskloop firstprivate(0)346 for (i = 0; i < 16; ++i)347 ;348 349 int x, y, z;350#pragma omp parallel351#pragma omp parallel master taskloop lastprivate(x) firstprivate(x)352 for (i = 0; i < 16; ++i)353 ;354#pragma omp parallel355#pragma omp parallel master taskloop lastprivate(x, y) firstprivate(x, y)356 for (i = 0; i < 16; ++i)357 ;358#pragma omp parallel359#pragma omp parallel master taskloop lastprivate(x, y, z) firstprivate(x, y, z)360 for (i = 0; i < 16; ++i)361 ;362}363 364void test_loop_messages(void) {365 float a[100], b[100], c[100];366#pragma omp parallel367// expected-error@+2 {{variable must be of integer or pointer type}}368#pragma omp parallel master taskloop369 for (float fi = 0; fi < 10.0; fi++) {370 c[(int)fi] = a[(int)fi] + b[(int)fi];371 }372#pragma omp parallel373// expected-error@+2 {{variable must be of integer or pointer type}}374#pragma omp parallel master taskloop375 for (double fi = 0; fi < 10.0; fi++) {376 c[(int)fi] = a[(int)fi] + b[(int)fi];377 }378 379 // expected-warning@+2 {{OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed}}380 #pragma omp parallel master taskloop381 for (__int128 ii = 0; ii < 10; ii++) {382 c[ii] = a[ii] + b[ii];383 }384}385 386