brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.2 KiB · 1b595f4 Raw
352 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp %s -Wuninitialized2 3// RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized4 5extern int omp_default_mem_alloc;6void foo() {7}8 9bool foobool(int argc) {10  return argc;11}12 13struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}14extern S1 a;15class S2 {16  mutable int a;17 18public:19  S2() : a(0) {}20  S2(const S2 &s2) : a(s2.a) {}21  static float S2s;22  static const float S2sc;23};24const float S2::S2sc = 0;25const S2 b;26const S2 ba[5];27class S3 {28  int a;29  S3 &operator=(const S3 &s3);30 31public:32  S3() : a(0) {}33  S3(const S3 &s3) : a(s3.a) {}34};35const S3 c;36const S3 ca[5];37extern const int f;38class S4 {39  int a;40  S4();41  S4(const S4 &s4); // expected-note 2 {{implicitly declared private here}}42 43public:44  S4(int v) : a(v) {}45};46class S5 {47  int a;48  S5(const S5 &s5) : a(s5.a) {} // expected-note 4 {{implicitly declared private here}}49 50public:51  S5() : a(0) {}52  S5(int v) : a(v) {}53};54class S6 {55  int a;56  S6() : a(0) {}57 58public:59  S6(const S6 &s6) : a(s6.a) {}60  S6(int v) : a(v) {}61};62 63S3 h;64#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}}65 66template <class I, class C>67int foomain(int argc, char **argv) {68  I e(4);69  C g(5);70  int i, z;71  int &j = i;72#pragma omp parallel73#pragma omp sections firstprivate // expected-error {{expected '(' after 'firstprivate'}}74  {75    foo();76  }77#pragma omp parallel78#pragma omp sections firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}79  {80    foo();81  }82#pragma omp parallel83#pragma omp sections firstprivate() // expected-error {{expected expression}}84  {85    foo();86  }87#pragma omp parallel88#pragma omp sections firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}89  {90    foo();91  }92#pragma omp parallel93#pragma omp sections firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}94  {95    foo();96  }97#pragma omp parallel98#pragma omp sections firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}99  {100    foo();101  }102#pragma omp parallel103#pragma omp sections firstprivate(argc) allocate , allocate(, allocate(omp_default , allocate(omp_default_mem_alloc, allocate(omp_default_mem_alloc:, allocate(omp_default_mem_alloc: argc, allocate(omp_default_mem_alloc: argv), allocate(argv) // expected-error {{expected '(' after 'allocate'}} expected-error 2 {{expected expression}} expected-error 2 {{expected ')'}} expected-error {{use of undeclared identifier 'omp_default'}} expected-note 2 {{to match this '('}}104  {105    foo();106  }107#pragma omp parallel108#pragma omp sections firstprivate(S1) // expected-error {{'S1' does not refer to a value}}109  {110    foo();111  }112#pragma omp parallel113#pragma omp sections firstprivate(z, a, b) // expected-error {{firstprivate variable with incomplete type 'S1'}}114  {115    foo();116  }117#pragma omp parallel118#pragma omp sections firstprivate(argv[1]) // expected-error {{expected variable name}}119  {120    foo();121  }122#pragma omp parallel123#pragma omp sections firstprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}}124  {125    foo();126  }127#pragma omp parallel128#pragma omp sections firstprivate(h) // expected-error {{threadprivate or thread local variable cannot be firstprivate}}129  {130    foo();131  }132#pragma omp parallel133#pragma omp sections linear(i) // expected-error {{unexpected OpenMP clause 'linear' in directive '#pragma omp sections'}}134  {135    foo();136  }137#pragma omp parallel138  {139    int v = 0;140    int i;                           // expected-note {{variable with automatic storage duration is predetermined as private; perhaps you forget to enclose 'omp sections' directive into a parallel or another task region?}}141#pragma omp sections firstprivate(i) // expected-error {{firstprivate variable must be shared}}142    {143      foo();144    }145    v += i;146  }147#pragma omp parallel shared(i)148#pragma omp parallel private(i)149#pragma omp sections firstprivate(j)150  {151    foo();152  }153#pragma omp parallel154#pragma omp sections firstprivate(i)155  {156    foo();157  }158#pragma omp parallel159#pragma omp sections lastprivate(g) firstprivate(g) // expected-error {{calling a private constructor of class 'S5'}}160  {161    foo();162  }163#pragma omp parallel private(i)      // expected-note {{defined as private}}164#pragma omp sections firstprivate(i) // expected-error {{firstprivate variable must be shared}}165  {166    foo();167  }168#pragma omp parallel reduction(+ : i) // expected-note {{defined as reduction}}169#pragma omp sections firstprivate(i)  // expected-error {{firstprivate variable must be shared}}170  {171    foo();172  }173  return 0;174}175 176namespace A {177double x;178#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}}179}180namespace B {181using A::x;182}183 184int main(int argc, char **argv) {185  const int d = 5;186  const int da[5] = {0};187  S4 e(4);188  S5 g(5);189  S3 m;190  S6 n(2);191  int i, z;192  int &j = i;193#pragma omp parallel194#pragma omp sections firstprivate // expected-error {{expected '(' after 'firstprivate'}}195  {196    foo();197  }198#pragma omp parallel199#pragma omp sections firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}200  {201    foo();202  }203#pragma omp parallel204#pragma omp sections firstprivate() // expected-error {{expected expression}}205  {206    foo();207  }208#pragma omp parallel209#pragma omp sections firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}210  {211    foo();212  }213#pragma omp parallel214#pragma omp sections firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}215  {216    foo();217  }218#pragma omp parallel219#pragma omp sections firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}220  {221    foo();222  }223#pragma omp parallel224#pragma omp sections firstprivate(argc, z)225  {226    foo();227  }228#pragma omp parallel229#pragma omp sections firstprivate(S1) // expected-error {{'S1' does not refer to a value}}230  {231    foo();232  }233#pragma omp parallel234#pragma omp sections firstprivate(a, b, c, d, f) // expected-error {{firstprivate variable with incomplete type 'S1'}}235  {236    foo();237  }238#pragma omp parallel239#pragma omp sections firstprivate(argv[1]) // expected-error {{expected variable name}}240  {241    foo();242  }243#pragma omp parallel244#pragma omp sections firstprivate(2 * 2) // expected-error {{expected variable name}}245  {246    foo();247  }248#pragma omp parallel249#pragma omp sections firstprivate(ba) // OK250  {251    foo();252  }253#pragma omp parallel254#pragma omp sections firstprivate(ca) // OK255  {256    foo();257  }258#pragma omp parallel259#pragma omp sections firstprivate(da) // OK260  {261    foo();262  }263  int xa;264#pragma omp parallel265#pragma omp sections firstprivate(xa) // OK266  {267    foo();268  }269#pragma omp parallel270#pragma omp sections firstprivate(S2::S2s) // OK271  {272    foo();273  }274#pragma omp parallel275#pragma omp sections firstprivate(S2::S2sc) // OK276  {277    foo();278  }279#pragma omp parallel280#pragma omp sections safelen(5) // expected-error {{unexpected OpenMP clause 'safelen' in directive '#pragma omp sections'}}281  {282    foo();283  }284#pragma omp parallel285#pragma omp sections firstprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}}286  {287    foo();288  }289#pragma omp parallel290#pragma omp sections firstprivate(m) // OK291  {292    foo();293  }294#pragma omp parallel295#pragma omp sections firstprivate(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be firstprivate}}296  {297    foo();298  }299#pragma omp parallel300#pragma omp sections private(xa), firstprivate(xa) // expected-error {{private variable cannot be firstprivate}} expected-note {{defined as private}}301  {302    foo();303  }304#pragma omp parallel shared(xa)305#pragma omp sections firstprivate(xa) // OK: may be firstprivate306  {307    foo();308  }309#pragma omp parallel310#pragma omp sections firstprivate(j)311  {312    foo();313  }314#pragma omp parallel315#pragma omp sections lastprivate(g) firstprivate(g) // expected-error {{calling a private constructor of class 'S5'}}316  {317    foo();318  }319#pragma omp parallel320#pragma omp sections lastprivate(n) firstprivate(n) // OK321  {322    foo();323  }324#pragma omp parallel325  {326    int v = 0;327    int i;                           // expected-note {{variable with automatic storage duration is predetermined as private; perhaps you forget to enclose 'omp sections' directive into a parallel or another task region?}}328#pragma omp sections firstprivate(i) // expected-error {{firstprivate variable must be shared}}329    {330      foo();331    }332    v += i;333  }334#pragma omp parallel private(i)      // expected-note {{defined as private}}335#pragma omp sections firstprivate(i) // expected-error {{firstprivate variable must be shared}}336  {337    foo();338  }339#pragma omp parallel reduction(+ : i) // expected-note {{defined as reduction}}340#pragma omp sections firstprivate(i)  // expected-error {{firstprivate variable must be shared}}341  {342    foo();343  }344  static int r;345#pragma omp sections firstprivate(r) // OK346  {347    foo();348  }349 350  return foomain<S4, S5>(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<S4, S5>' requested here}}351}352