brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.4 KiB · 124dfdb Raw
439 lines · c
1// RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -triple x86_64-unknown-unknown -verify=expected,omp45 %s -Wuninitialized2// RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=50 -triple x86_64-unknown-unknown -verify=expected,omp50 %s -Wuninitialized3// RUN: %clang_cc1 -fsyntax-only -fopenmp -triple x86_64-unknown-unknown -verify=expected,omp51 %s -Wuninitialized4 5// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=45 -triple x86_64-unknown-unknown -verify=expected,omp45 %s -Wuninitialized6// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=50 -triple x86_64-unknown-unknown -verify=expected,omp50 %s -Wuninitialized7// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -triple x86_64-unknown-unknown -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 for12  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 for'}}17#pragma omp for18 19// expected-error@+1 {{unexpected OpenMP directive '#pragma omp for'}}20#pragma omp for foo21 22void test_no_clause(void) {23  int i;24#pragma omp for25  for (i = 0; i < 16; ++i)26    ;27 28// expected-error@+2 {{statement after '#pragma omp for' must be a for loop}}29#pragma omp for30  ++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 parallel41#pragma omp for42  for (i = 0; i < 16; ++i) {43    if (i == 5)44      goto L1; // expected-error {{use of undeclared label 'L1'}}45    else if (i == 6)46      return; // expected-error {{cannot return from OpenMP region}}47    else if (i == 7)48      goto L2;49    else if (i == 8) {50    L2:51      x[i]++;52    }53  }54 55  if (x[0] == 0)56    goto L2; // expected-error {{use of undeclared label 'L2'}}57  else if (x[1] == 1)58    goto L1;59}60 61void test_invalid_clause(void) {62  int i;63#pragma omp parallel64// expected-warning@+1 {{extra tokens at the end of '#pragma omp for' are ignored}}65#pragma omp for foo bar66  for (i = 0; i < 16; ++i)67    ;68// At one time, this failed an assert.69// expected-error@+1 {{unexpected OpenMP clause 'num_teams' in directive '#pragma omp for'}}70#pragma omp for num_teams(3)71  for (i = 0; i < 16; ++i)72    ;73// At one time, this error was reported twice.74// expected-error@+1 {{unexpected OpenMP clause 'uniform' in directive '#pragma omp for'}}75#pragma omp for uniform76  for (i = 0; i < 16; ++i)77    ;78// expected-error@+1 {{unexpected OpenMP clause 'if' in directive '#pragma omp for'}}79#pragma omp for if(0)80  for (i = 0; i < 16; ++i)81    ;82}83 84void test_non_identifiers(void) {85  int i, x;86 87#pragma omp parallel88// expected-warning@+1 {{extra tokens at the end of '#pragma omp for' are ignored}}89#pragma omp for;90  for (i = 0; i < 16; ++i)91    ;92// expected-warning@+2 {{extra tokens at the end of '#pragma omp for' are ignored}}93#pragma omp parallel94#pragma omp for linear(x);95  for (i = 0; i < 16; ++i)96    ;97 98#pragma omp parallel99// expected-warning@+1 {{extra tokens at the end of '#pragma omp for' are ignored}}100#pragma omp for private(x);101  for (i = 0; i < 16; ++i)102    ;103 104#pragma omp parallel105// expected-warning@+1 {{extra tokens at the end of '#pragma omp for' are ignored}}106#pragma omp for, private(x);107  for (i = 0; i < 16; ++i)108    ;109}110 111extern int foo(void);112 113void test_collapse(void) {114  int i;115#pragma omp parallel116// expected-error@+1 {{expected '('}}117#pragma omp for collapse118  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 for collapse(123  for (i = 0; i < 16; ++i)124    ;125#pragma omp parallel126// expected-error@+1 {{expected expression}}127#pragma omp for collapse()128  for (i = 0; i < 16; ++i)129    ;130#pragma omp parallel131// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}132#pragma omp for collapse(,133  for (i = 0; i < 16; ++i)134    ;135#pragma omp parallel136// expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}137#pragma omp for collapse(, )138  for (i = 0; i < 16; ++i)139    ;140#pragma omp parallel141// expected-warning@+2 {{extra tokens at the end of '#pragma omp for' are ignored}}142// expected-error@+1 {{expected '('}}143#pragma omp for collapse 4)144  for (i = 0; i < 16; ++i)145    ;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 for collapse(4150  for (i = 0; i < 16; ++i)151    ; // expected-error {{expected 4 for loops after '#pragma omp for', but found only 1}}152#pragma omp parallel153// expected-error@+2 {{expected ')'}}154// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}155#pragma omp for collapse(4,156  for (i = 0; i < 16; ++i)157    ; // expected-error {{expected 4 for loops after '#pragma omp for', but found only 1}}158#pragma omp parallel159// expected-error@+2 {{expected ')'}}160// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}161#pragma omp for collapse(4, )162  for (i = 0; i < 16; ++i)163    ; // expected-error {{expected 4 for loops after '#pragma omp for', but found only 1}}164#pragma omp parallel165// expected-note@+1 {{as specified in 'collapse' clause}}166#pragma omp for collapse(4)167  for (i = 0; i < 16; ++i)168    ; // expected-error {{expected 4 for loops after '#pragma omp for', but found only 1}}169#pragma omp parallel170// expected-error@+2 {{expected ')'}}171// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}172#pragma omp for collapse(4 4)173  for (i = 0; i < 16; ++i)174    ; // expected-error {{expected 4 for loops after '#pragma omp for', but found only 1}}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 for collapse(4, , 4)179  for (i = 0; i < 16; ++i)180    ; // expected-error {{expected 4 for loops after '#pragma omp for', but found only 1}}181#pragma omp parallel182#pragma omp for collapse(4)183  for (int i1 = 0; i1 < 16; ++i1)184    for (int i2 = 0; i2 < 16; ++i2)185      for (int i3 = 0; i3 < 16; ++i3)186        for (int i4 = 0; i4 < 16; ++i4)187          foo();188#pragma omp parallel189// expected-error@+2 {{expected ')'}}190// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}191#pragma omp for collapse(4, 8)192  for (i = 0; i < 16; ++i)193    ; // expected-error {{expected 4 for loops after '#pragma omp for', but found only 1}}194#pragma omp parallel195// expected-error@+1 {{integer constant expression}}196#pragma omp for collapse(2.5)197  for (i = 0; i < 16; ++i)198    ;199#pragma omp parallel200// expected-error@+1 {{integer constant expression}}201#pragma omp for collapse(foo())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 for collapse(-5)207  for (i = 0; i < 16; ++i)208    ;209#pragma omp parallel210// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}211#pragma omp for collapse(0)212  for (i = 0; i < 16; ++i)213    ;214#pragma omp parallel215// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}216#pragma omp for collapse(5 - 5)217  for (i = 0; i < 16; ++i)218    ;219#pragma omp parallel220#pragma omp for collapse(2)221  for (i = 0; i < 16; ++i) // expected-note {{defined as private}}222// 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?}}223    for (int j = 0; j < 16; ++j)224// expected-error@+2 2 {{reduction variable must be shared}}225// expected-error@+1 {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}226#pragma omp for reduction(+ : i, j)227      for (int k = 0; k < 16; ++k)228        i += j;229}230 231void test_private(void) {232  int i;233#pragma omp parallel234// expected-error@+2 {{expected expression}}235// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}236#pragma omp for private(237  for (i = 0; i < 16; ++i)238    ;239#pragma omp parallel240// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}241// expected-error@+1 2 {{expected expression}}242#pragma omp for private(,243  for (i = 0; i < 16; ++i)244    ;245#pragma omp parallel246// expected-error@+1 2 {{expected expression}}247#pragma omp for private(, )248  for (i = 0; i < 16; ++i)249    ;250#pragma omp parallel251// expected-error@+1 {{expected expression}}252#pragma omp for private()253  for (i = 0; i < 16; ++i)254    ;255#pragma omp parallel256// expected-error@+1 {{expected expression}}257#pragma omp for private(int)258  for (i = 0; i < 16; ++i)259    ;260#pragma omp parallel261// expected-error@+1 {{expected variable name}}262#pragma omp for private(0)263  for (i = 0; i < 16; ++i)264    ;265 266  int x, y, z;267#pragma omp parallel268#pragma omp for private(x)269  for (i = 0; i < 16; ++i)270    ;271#pragma omp parallel272#pragma omp for private(x, y)273  for (i = 0; i < 16; ++i)274    ;275#pragma omp parallel276#pragma omp for private(x, y, z)277  for (i = 0; i < 16; ++i) {278    x = y * i + z;279  }280}281 282void test_lastprivate(void) {283  int i;284#pragma omp parallel285// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}286// expected-error@+1 {{expected expression}}287#pragma omp for lastprivate(288  for (i = 0; i < 16; ++i)289    ;290 291#pragma omp parallel292// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}293// expected-error@+1 2 {{expected expression}}294#pragma omp for lastprivate(,295  for (i = 0; i < 16; ++i)296    ;297#pragma omp parallel298// expected-error@+1 2 {{expected expression}}299#pragma omp for lastprivate(, )300  for (i = 0; i < 16; ++i)301    ;302#pragma omp parallel303// expected-error@+1 {{expected expression}}304#pragma omp for lastprivate()305  for (i = 0; i < 16; ++i)306    ;307#pragma omp parallel308// expected-error@+1 {{expected expression}}309#pragma omp for lastprivate(int)310  for (i = 0; i < 16; ++i)311    ;312#pragma omp parallel313// expected-error@+1 {{expected variable name}}314#pragma omp for lastprivate(0)315  for (i = 0; i < 16; ++i)316    ;317 318  int x, y, z;319#pragma omp parallel320#pragma omp for lastprivate(x)321  for (i = 0; i < 16; ++i)322    ;323#pragma omp parallel324#pragma omp for lastprivate(x, y)325  for (i = 0; i < 16; ++i)326    ;327#pragma omp parallel328#pragma omp for lastprivate(x, y, z)329  for (i = 0; i < 16; ++i)330    ;331}332 333void test_firstprivate(void) {334  int i;335#pragma omp parallel336// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}337// expected-error@+1 {{expected expression}}338#pragma omp for firstprivate(339  for (i = 0; i < 16; ++i)340    ;341 342#pragma omp parallel343// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}344// expected-error@+1 2 {{expected expression}}345#pragma omp for firstprivate(,346  for (i = 0; i < 16; ++i)347    ;348#pragma omp parallel349// expected-error@+1 2 {{expected expression}}350#pragma omp for firstprivate(, )351  for (i = 0; i < 16; ++i)352    ;353#pragma omp parallel354// expected-error@+1 {{expected expression}}355#pragma omp for firstprivate()356  for (i = 0; i < 16; ++i)357    ;358#pragma omp parallel359// expected-error@+1 {{expected expression}}360#pragma omp for firstprivate(int)361  for (i = 0; i < 16; ++i)362    ;363#pragma omp parallel364// expected-error@+1 {{expected variable name}}365#pragma omp for firstprivate(0)366  for (i = 0; i < 16; ++i)367    ;368 369  int x, y, z;370#pragma omp parallel371#pragma omp for lastprivate(x) firstprivate(x)372  for (i = 0; i < 16; ++i)373    ;374#pragma omp parallel375#pragma omp for lastprivate(x, y) firstprivate(x, y)376  for (i = 0; i < 16; ++i)377    ;378#pragma omp parallel379#pragma omp for lastprivate(x, y, z) firstprivate(x, y, z)380  for (i = 0; i < 16; ++i)381    ;382}383 384void test_loop_messages(void) {385  float a[100], b[100], c[100];386#pragma omp parallel387// expected-error@+2 {{variable must be of integer or pointer type}}388#pragma omp for389  for (float fi = 0; fi < 10.0; fi++) {390    c[(int)fi] = a[(int)fi] + b[(int)fi];391  }392#pragma omp parallel393// expected-error@+2 {{variable must be of integer or pointer type}}394#pragma omp for395  for (double fi = 0; fi < 10.0; fi++) {396    c[(int)fi] = a[(int)fi] + b[(int)fi];397  }398 399  // expected-warning@+2 {{OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed}}400  #pragma omp for401  for (__int128 ii = 0; ii < 10; ii++) {402    c[ii] = a[ii] + b[ii];403  }404#pragma omp for order // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp for'}} expected-error {{expected '(' after 'order'}}405  for (int i = 0; i < 10; ++i)406    ;407#pragma omp for order( // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp for'}} expected-error {{expected ')'}} expected-note {{to match this '('}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}} omp51-error {{expected 'concurrent' in OpenMP clause 'order'}}408  for (int i = 0; i < 10; ++i)409    ;410#pragma omp for order(none // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp for'}} expected-error {{expected ')'}} expected-note {{to match this '('}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}} omp51-error {{expected 'concurrent' in OpenMP clause 'order'}}411  for (int i = 0; i < 10; ++i)412    ;413#pragma omp for order(concurrent // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp for'}} expected-error {{expected ')'}} expected-note {{to match this '('}}414  for (int i = 0; i < 10; ++i)415    ;416#pragma omp for order(concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp for'}}417  for (int i = 0; i < 10; ++i)418    ;419#pragma omp for ordered order(concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp for'}} omp50-error {{'order' clause with 'concurrent' modifier cannot be specified if an 'ordered' clause is specified}} omp50-note {{'ordered' clause}} omp51-error {{'order' clause with 'concurrent' modifier cannot be specified if an 'ordered' clause is specified}} omp51-note {{'ordered' clause}}420  for (int i = 0; i < 10; ++i)421    ;422#pragma omp for order(unconstrained:) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp for'}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}} omp51-error {{expected 'concurrent' in OpenMP clause 'order'}}423  for (int i = 0; i < 10; ++i)424    ;425#pragma omp for order(reproducible:concurrent // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp for'}} expected-error {{expected ')'}} expected-note {{to match this '('}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}}426  for (int i = 0; i < 10; ++i)427    ;428#pragma omp for order(reproducible:concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp for'}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}}429  for (int i = 0; i < 10; ++i)430    ;431#pragma omp for order(unconstrained:concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp for'}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}}432  for (int i = 0; i < 10; ++i)433    ;434#pragma omp for order(concurrent) order(concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp for'}} omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp for'}} omp51-error {{directive '#pragma omp for' cannot contain more than one 'order' clause}}435  for (int i = 0; i < 10; ++i)436    ;437}438 439