brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.2 KiB · d0d2279 Raw
321 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 13void xxx(int argc) {14  int fp; // expected-note {{initialize the variable 'fp' to silence this warning}}15#pragma omp parallel sections firstprivate(fp) // expected-warning {{variable 'fp' is uninitialized when used here}}16  {17    for (int i = 0; i < 10; ++i)18      ;19  }20}21 22struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}23extern S1 a;24class S2 {25  mutable int a;26 27public:28  S2() : a(0) {}29  S2(const S2 &s2) : a(s2.a) {}30  static float S2s;31  static const float S2sc;32};33const float S2::S2sc = 0;34const S2 b;35const S2 ba[5];36class S3 {37  int a;38  S3 &operator=(const S3 &s3);39 40public:41  S3() : a(0) {}42  S3(const S3 &s3) : a(s3.a) {}43};44const S3 c;45const S3 ca[5];46extern const int f;47class S4 {48  int a;49  S4();50  S4(const S4 &s4); // expected-note 2 {{implicitly declared private here}}51 52public:53  S4(int v) : a(v) {}54};55class S5 {56  int a;57  S5(const S5 &s5) : a(s5.a) {} // expected-note 4 {{implicitly declared private here}}58 59public:60  S5() : a(0) {}61  S5(int v) : a(v) {}62};63class S6 {64  int a;65  S6() : a(0) {}66 67public:68  S6(const S6 &s6) : a(s6.a) {}69  S6(int v) : a(v) {}70};71 72S3 h;73#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}}74 75template <class I, class C>76int foomain(int argc, char **argv) {77  I e(4);78  C g(5);79  int i, z;80  int &j = i;81#pragma omp parallel sections firstprivate // expected-error {{expected '(' after 'firstprivate'}}82  {83    foo();84  }85#pragma omp parallel sections firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}86  {87    foo();88  }89#pragma omp parallel sections firstprivate() // expected-error {{expected expression}}90  {91    foo();92  }93#pragma omp parallel sections firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}94  {95    foo();96  }97#pragma omp parallel sections firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}98  {99    foo();100  }101#pragma omp parallel sections firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}102  {103    foo();104  }105#pragma omp parallel 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 '('}}106  {107    foo();108  }109#pragma omp parallel sections firstprivate(S1) // expected-error {{'S1' does not refer to a value}}110  {111    foo();112  }113#pragma omp parallel sections firstprivate(z, a, b) // expected-error {{firstprivate variable with incomplete type 'S1'}}114  {115    foo();116  }117#pragma omp parallel sections firstprivate(argv[1]) // expected-error {{expected variable name}}118  {119    foo();120  }121#pragma omp parallel sections firstprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}}122  {123    foo();124  }125#pragma omp parallel sections firstprivate(h) // expected-error {{threadprivate or thread local variable cannot be firstprivate}}126  {127    foo();128  }129#pragma omp parallel sections linear(i) // expected-error {{unexpected OpenMP clause 'linear' in directive '#pragma omp parallel sections'}}130  {131    foo();132  }133#pragma omp parallel134  {135    int v = 0;136    int i;137#pragma omp parallel sections firstprivate(i)138    {139      foo();140    }141    v += i;142  }143#pragma omp parallel shared(i)144#pragma omp parallel private(i)145#pragma omp parallel sections firstprivate(j)146  {147    foo();148  }149#pragma omp parallel sections firstprivate(i)150  {151    foo();152  }153#pragma omp parallel sections lastprivate(g) firstprivate(g) // expected-error {{calling a private constructor of class 'S5'}}154  {155    foo();156  }157#pragma omp parallel private(i)158#pragma omp parallel sections firstprivate(i)159  {160    foo();161  }162#pragma omp parallel reduction(+ : i)163#pragma omp parallel sections firstprivate(i)164  {165    foo();166  }167  return 0;168}169 170namespace A {171double x;172#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}}173}174namespace B {175using A::x;176}177 178int main(int argc, char **argv) {179  const int d = 5;180  const int da[5] = {0};181  S4 e(4);182  S5 g(5);183  S3 m;184  S6 n(2);185  int i, z;186  int &j = i;187#pragma omp parallel sections firstprivate // expected-error {{expected '(' after 'firstprivate'}}188  {189    foo();190  }191#pragma omp parallel sections firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}192  {193    foo();194  }195#pragma omp parallel sections firstprivate() // expected-error {{expected expression}}196  {197    foo();198  }199#pragma omp parallel sections firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}200  {201    foo();202  }203#pragma omp parallel sections firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}204  {205    foo();206  }207#pragma omp parallel sections firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}208  {209    foo();210  }211#pragma omp parallel sections firstprivate(argc, z)212  {213    foo();214  }215#pragma omp parallel sections firstprivate(S1) // expected-error {{'S1' does not refer to a value}}216  {217    foo();218  }219#pragma omp parallel sections firstprivate(a, b, c, d, f) // expected-error {{firstprivate variable with incomplete type 'S1'}}220  {221    foo();222  }223#pragma omp parallel sections firstprivate(argv[1]) // expected-error {{expected variable name}}224  {225    foo();226  }227#pragma omp parallel sections firstprivate(2 * 2) // expected-error {{expected variable name}}228  {229    foo();230  }231#pragma omp parallel sections firstprivate(ba) // OK232  {233    foo();234  }235#pragma omp parallel sections firstprivate(ca) // OK236  {237    foo();238  }239#pragma omp parallel sections firstprivate(da) // OK240  {241    foo();242  }243  int xa;244#pragma omp parallel sections firstprivate(xa) // OK245  {246    foo();247  }248#pragma omp parallel sections firstprivate(S2::S2s) // OK249  {250    foo();251  }252#pragma omp parallel sections firstprivate(S2::S2sc) // OK253  {254    foo();255  }256#pragma omp parallel sections safelen(5) // expected-error {{unexpected OpenMP clause 'safelen' in directive '#pragma omp parallel sections'}}257  {258    foo();259  }260#pragma omp parallel sections firstprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}}261  {262    foo();263  }264#pragma omp parallel sections firstprivate(m) // OK265  {266    foo();267  }268#pragma omp parallel sections firstprivate(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be firstprivate}}269  {270    foo();271  }272#pragma omp parallel sections private(xa), firstprivate(xa) // expected-error {{private variable cannot be firstprivate}} expected-note {{defined as private}}273  {274    foo();275  }276#pragma omp parallel shared(xa)277#pragma omp parallel sections firstprivate(xa) // OK: may be firstprivate278  {279    foo();280  }281#pragma omp parallel sections firstprivate(j)282  {283    foo();284  }285#pragma omp parallel sections lastprivate(g) firstprivate(g) // expected-error {{calling a private constructor of class 'S5'}}286  {287    foo();288  }289#pragma omp parallel sections lastprivate(n) firstprivate(n) // OK290  {291    foo();292  }293#pragma omp parallel294  {295    int v = 0;296    int i;297#pragma omp parallel sections firstprivate(i)298    {299      foo();300    }301    v += i;302  }303#pragma omp parallel private(i)304#pragma omp parallel sections firstprivate(i)305  {306    foo();307  }308#pragma omp parallel reduction(+ : i)309#pragma omp parallel sections firstprivate(i)310  {311    foo();312  }313  static int r;314#pragma omp parallel sections firstprivate(r) // OK315  {316    foo();317  }318 319  return foomain<S4, S5>(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<S4, S5>' requested here}}320}321