383 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 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 taskloop'}}13#pragma omp taskloop14 15// expected-error@+1 {{unexpected OpenMP directive '#pragma omp taskloop'}}16#pragma omp taskloop foo17 18void test_no_clause(void) {19 int i;20#pragma omp taskloop21 for (i = 0; i < 16; ++i)22 ;23 24// expected-error@+2 {{statement after '#pragma omp taskloop' must be a for loop}}25#pragma omp 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 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;59#pragma omp parallel60// expected-warning@+1 {{extra tokens at the end of '#pragma omp taskloop' are ignored}}61#pragma omp taskloop foo bar62 for (i = 0; i < 16; ++i)63 ;64// expected-error@+1 {{directive '#pragma omp taskloop' cannot contain more than one 'nogroup' clause}}65#pragma omp taskloop nogroup nogroup66 for (i = 0; i < 16; ++i)67 ;68}69 70void test_non_identifiers(void) {71 int i, x;72 73#pragma omp parallel74// expected-warning@+1 {{extra tokens at the end of '#pragma omp taskloop' are ignored}}75#pragma omp taskloop;76 for (i = 0; i < 16; ++i)77 ;78// expected-warning@+3 {{extra tokens at the end of '#pragma omp taskloop' are ignored}}79// expected-error@+2 {{unexpected OpenMP clause 'linear' in directive '#pragma omp taskloop'}}80#pragma omp parallel81#pragma omp taskloop linear(x);82 for (i = 0; i < 16; ++i)83 ;84 85#pragma omp parallel86// expected-warning@+1 {{extra tokens at the end of '#pragma omp taskloop' are ignored}}87#pragma omp taskloop private(x);88 for (i = 0; i < 16; ++i)89 ;90 91#pragma omp parallel92// expected-warning@+1 {{extra tokens at the end of '#pragma omp taskloop' are ignored}}93#pragma omp taskloop, private(x);94 for (i = 0; i < 16; ++i)95 ;96}97 98extern int foo(void);99 100void test_collapse(void) {101 int i;102#pragma omp parallel103// expected-error@+1 {{expected '('}}104#pragma omp taskloop collapse105 for (i = 0; i < 16; ++i)106 ;107#pragma omp parallel108// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}109#pragma omp taskloop collapse(110 for (i = 0; i < 16; ++i)111 ;112#pragma omp parallel113// expected-error@+1 {{expected expression}}114#pragma omp taskloop collapse()115 for (i = 0; i < 16; ++i)116 ;117#pragma omp parallel118// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}119#pragma omp taskloop collapse(,120 for (i = 0; i < 16; ++i)121 ;122#pragma omp parallel123// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}124#pragma omp taskloop collapse(, )125 for (i = 0; i < 16; ++i)126 ;127#pragma omp parallel128// expected-warning@+2 {{extra tokens at the end of '#pragma omp taskloop' are ignored}}129// expected-error@+1 {{expected '('}}130#pragma omp taskloop collapse 4)131 for (i = 0; i < 16; ++i)132 ;133#pragma omp parallel134// expected-error@+2 {{expected ')'}}135// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}136#pragma omp taskloop collapse(4137 for (i = 0; i < 16; ++i)138 ; // expected-error {{expected 4 for loops after '#pragma omp taskloop', but found only 1}}139#pragma omp parallel140// expected-error@+2 {{expected ')'}}141// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}142#pragma omp taskloop collapse(4,143 for (i = 0; i < 16; ++i)144 ; // expected-error {{expected 4 for loops after '#pragma omp taskloop', but found only 1}}145#pragma omp parallel146// expected-error@+2 {{expected ')'}}147// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}148#pragma omp taskloop collapse(4, )149 for (i = 0; i < 16; ++i)150 ; // expected-error {{expected 4 for loops after '#pragma omp taskloop', but found only 1}}151#pragma omp parallel152// expected-note@+1 {{as specified in 'collapse' clause}}153#pragma omp taskloop collapse(4)154 for (i = 0; i < 16; ++i)155 ; // expected-error {{expected 4 for loops after '#pragma omp taskloop', but found only 1}}156#pragma omp parallel157// expected-error@+2 {{expected ')'}}158// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}159#pragma omp taskloop collapse(4 4)160 for (i = 0; i < 16; ++i)161 ; // expected-error {{expected 4 for loops after '#pragma omp taskloop', but found only 1}}162#pragma omp parallel163// expected-error@+2 {{expected ')'}}164// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}165#pragma omp taskloop collapse(4, , 4)166 for (i = 0; i < 16; ++i)167 ; // expected-error {{expected 4 for loops after '#pragma omp taskloop', but found only 1}}168#pragma omp parallel169#pragma omp taskloop collapse(4)170 for (int i1 = 0; i1 < 16; ++i1)171 for (int i2 = 0; i2 < 16; ++i2)172 for (int i3 = 0; i3 < 16; ++i3)173 for (int i4 = 0; i4 < 16; ++i4)174 foo();175#pragma omp parallel176// expected-error@+2 {{expected ')'}}177// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}178#pragma omp taskloop collapse(4, 8)179 for (i = 0; i < 16; ++i)180 ; // expected-error {{expected 4 for loops after '#pragma omp taskloop', but found only 1}}181#pragma omp parallel182// expected-error@+1 {{integer constant expression}}183#pragma omp taskloop collapse(2.5)184 for (i = 0; i < 16; ++i)185 ;186#pragma omp parallel187// expected-error@+1 {{integer constant expression}}188#pragma omp taskloop collapse(foo())189 for (i = 0; i < 16; ++i)190 ;191#pragma omp parallel192// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}193#pragma omp taskloop collapse(-5)194 for (i = 0; i < 16; ++i)195 ;196#pragma omp parallel197// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}198#pragma omp taskloop collapse(0)199 for (i = 0; i < 16; ++i)200 ;201#pragma omp parallel202// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}203#pragma omp taskloop collapse(5 - 5)204 for (i = 0; i < 16; ++i)205 ;206}207 208void test_private(void) {209 int i;210#pragma omp parallel211// expected-error@+2 {{expected expression}}212// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}213#pragma omp taskloop private(214 for (i = 0; i < 16; ++i)215 ;216#pragma omp parallel217// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}218// expected-error@+1 2 {{expected expression}}219#pragma omp taskloop private(,220 for (i = 0; i < 16; ++i)221 ;222#pragma omp parallel223// expected-error@+1 2 {{expected expression}}224#pragma omp taskloop private(, )225 for (i = 0; i < 16; ++i)226 ;227#pragma omp parallel228// expected-error@+1 {{expected expression}}229#pragma omp taskloop private()230 for (i = 0; i < 16; ++i)231 ;232#pragma omp parallel233// expected-error@+1 {{expected expression}}234#pragma omp taskloop private(int)235 for (i = 0; i < 16; ++i)236 ;237#pragma omp parallel238// expected-error@+1 {{expected variable name}}239#pragma omp taskloop private(0)240 for (i = 0; i < 16; ++i)241 ;242 243 int x, y, z;244#pragma omp parallel245#pragma omp taskloop private(x)246 for (i = 0; i < 16; ++i)247 ;248#pragma omp parallel249#pragma omp taskloop private(x, y)250 for (i = 0; i < 16; ++i)251 ;252#pragma omp parallel253#pragma omp taskloop private(x, y, z)254 for (i = 0; i < 16; ++i) {255 x = y * i + z;256 }257}258 259void test_lastprivate(void) {260 int i;261#pragma omp parallel262// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}263// expected-error@+1 {{expected expression}}264#pragma omp taskloop lastprivate(265 for (i = 0; i < 16; ++i)266 ;267 268#pragma omp parallel269// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}270// expected-error@+1 2 {{expected expression}}271#pragma omp taskloop lastprivate(,272 for (i = 0; i < 16; ++i)273 ;274#pragma omp parallel275// expected-error@+1 2 {{expected expression}}276#pragma omp taskloop lastprivate(, )277 for (i = 0; i < 16; ++i)278 ;279#pragma omp parallel280// expected-error@+1 {{expected expression}}281#pragma omp taskloop lastprivate()282 for (i = 0; i < 16; ++i)283 ;284#pragma omp parallel285// expected-error@+1 {{expected expression}}286#pragma omp taskloop lastprivate(int)287 for (i = 0; i < 16; ++i)288 ;289#pragma omp parallel290// expected-error@+1 {{expected variable name}}291#pragma omp taskloop lastprivate(0)292 for (i = 0; i < 16; ++i)293 ;294 295 int x, y, z;296#pragma omp parallel297#pragma omp taskloop lastprivate(x)298 for (i = 0; i < 16; ++i)299 ;300#pragma omp parallel301#pragma omp taskloop lastprivate(x, y)302 for (i = 0; i < 16; ++i)303 ;304#pragma omp parallel305#pragma omp taskloop lastprivate(x, y, z)306 for (i = 0; i < 16; ++i)307 ;308}309 310void test_firstprivate(void) {311 int i;312#pragma omp parallel313// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}314// expected-error@+1 {{expected expression}}315#pragma omp taskloop firstprivate(316 for (i = 0; i < 16; ++i)317 ;318 319#pragma omp parallel320// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}321// expected-error@+1 2 {{expected expression}}322#pragma omp taskloop firstprivate(,323 for (i = 0; i < 16; ++i)324 ;325#pragma omp parallel326// expected-error@+1 2 {{expected expression}}327#pragma omp taskloop firstprivate(, )328 for (i = 0; i < 16; ++i)329 ;330#pragma omp parallel331// expected-error@+1 {{expected expression}}332#pragma omp taskloop firstprivate()333 for (i = 0; i < 16; ++i)334 ;335#pragma omp parallel336// expected-error@+1 {{expected expression}}337#pragma omp taskloop firstprivate(int)338 for (i = 0; i < 16; ++i)339 ;340#pragma omp parallel341// expected-error@+1 {{expected variable name}}342#pragma omp taskloop firstprivate(0)343 for (i = 0; i < 16; ++i)344 ;345 346 int x, y, z;347#pragma omp parallel348#pragma omp taskloop lastprivate(x) firstprivate(x)349 for (i = 0; i < 16; ++i)350 ;351#pragma omp parallel352#pragma omp taskloop lastprivate(x, y) firstprivate(x, y)353 for (i = 0; i < 16; ++i)354 ;355#pragma omp parallel356#pragma omp taskloop lastprivate(x, y, z) firstprivate(x, y, z)357 for (i = 0; i < 16; ++i)358 ;359}360 361void test_loop_messages(void) {362 float a[100], b[100], c[100];363#pragma omp parallel364// expected-error@+2 {{variable must be of integer or pointer type}}365#pragma omp taskloop366 for (float fi = 0; fi < 10.0; fi++) {367 c[(int)fi] = a[(int)fi] + b[(int)fi];368 }369#pragma omp parallel370// expected-error@+2 {{variable must be of integer or pointer type}}371#pragma omp taskloop372 for (double fi = 0; fi < 10.0; fi++) {373 c[(int)fi] = a[(int)fi] + b[(int)fi];374 }375 376 // expected-warning@+2 {{OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed}}377 #pragma omp taskloop378 for (__int128 ii = 0; ii < 10; ii++) {379 c[ii] = a[ii] + b[ii];380 }381}382 383