brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.6 KiB · 1421988 Raw
251 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};21const S2 b;22const S2 ba[5];23class S3 {24  int a;25 26public:27  S3() : a(0) {}28};29const S3 ca[5];30class S4 {31  int a;32  S4(); // expected-note {{implicitly declared private here}}33 34public:35  S4(int v) : a(v) {36#pragma omp for private(a) private(this->a)37    for (int k = 0; k < v; ++k)38      ++this->a;39  }40};41class S5 {42  int a;43  S5() : a(0) {} // expected-note {{implicitly declared private here}}44 45public:46  S5(int v) : a(v) {}47  S5 &operator=(S5 &s) {48#pragma omp for private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}}49    for (int k = 0; k < s.a; ++k)50      ++s.a;51    return *this;52  }53};54 55template <typename T>56class S6 {57public:58  T a;59 60  S6() : a(0) {}61  S6(T v) : a(v) {62#pragma omp for private(a) private(this->a)63    for (int k = 0; k < v; ++k)64      ++this->a;65  }66  S6 &operator=(S6 &s) {67#pragma omp for private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}}68    for (int k = 0; k < s.a; ++k)69      ++s.a;70    return *this;71  }72};73 74template <typename T>75class S7 : public T {76  T a;77  S7() : a(0) {}78 79public:80  S7(T v) : a(v) {81#pragma omp for private(a) private(this->a) private(T::a)82    for (int k = 0; k < a.a; ++k)83      ++this->a.a;84  }85  S7 &operator=(S7 &s) {86#pragma omp for private(a) private(this->a) private(s.a) private(s.T::a) // expected-error 2 {{expected variable name or data member of current class}}87    for (int k = 0; k < s.a.a; ++k)88      ++s.a.a;89    return *this;90  }91};92 93S3 h;94#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}}95 96template <class I, class C>97int foomain(I argc, C **argv) {98  I e(4);99  I g(5);100  int i;101  int &j = i;102#pragma omp for private // expected-error {{expected '(' after 'private'}}103  for (int k = 0; k < argc; ++k)104    ++k;105#pragma omp for private( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}106  for (int k = 0; k < argc; ++k)107    ++k;108#pragma omp for private() // expected-error {{expected expression}}109  for (int k = 0; k < argc; ++k)110    ++k;111#pragma omp for private(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}112  for (int k = 0; k < argc; ++k)113    ++k;114#pragma omp for private(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}115  for (int k = 0; k < argc; ++k)116    ++k;117#pragma omp for private(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}118  for (int k = 0; k < argc; ++k)119    ++k;120#pragma omp for private(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 '('}}121  for (int k = 0; k < argc; ++k)122    ++k;123#pragma omp for private(S1) // expected-error {{'S1' does not refer to a value}}124  for (int k = 0; k < argc; ++k)125    ++k;126#pragma omp for private(a, b) // expected-error {{private variable with incomplete type 'S1'}}127  for (int k = 0; k < argc; ++k)128    ++k;129#pragma omp for private(argv[1]) // expected-error {{expected variable name}}130  for (int k = 0; k < argc; ++k)131    ++k;132#pragma omp for private(e, g)133  for (int k = 0; k < argc; ++k)134    ++k;135#pragma omp for private(h) // expected-error {{threadprivate or thread local variable cannot be private}}136  for (int k = 0; k < argc; ++k)137    ++k;138#pragma omp for shared(i) // expected-error {{unexpected OpenMP clause 'shared' in directive '#pragma omp for'}}139  for (int k = 0; k < argc; ++k)140    ++k;141#pragma omp parallel142  {143    int v = 0;144    int i;145#pragma omp for private(i)146    for (int k = 0; k < argc; ++k) {147      i = k;148      v += i;149    }150  }151#pragma omp parallel shared(i)152#pragma omp parallel private(i)153#pragma omp for private(j)154  for (int k = 0; k < argc; ++k)155    ++k;156#pragma omp for private(i)157  for (int k = 0; k < argc; ++k)158    ++k;159  return 0;160}161 162void bar(S4 a[2]) {163#pragma omp parallel164#pragma omp for private(a)165  for (int i = 0; i < 2; ++i)166    foo();167}168 169namespace A {170double x;171#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}}172}173namespace B {174using A::x;175}176 177int main(int argc, char **argv) {178  S4 e(4);179  S5 g(5);180  S6<float> s6(0.0) , s6_0(1.0);181  S7<S6<float> > s7(0.0) , s7_0(1.0);182  int i;183  int &j = i;184#pragma omp for private // expected-error {{expected '(' after 'private'}}185  for (int k = 0; k < argc; ++k)186    ++k;187#pragma omp for private( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}188  for (int k = 0; k < argc; ++k)189    ++k;190#pragma omp for private() // expected-error {{expected expression}}191  for (int k = 0; k < argc; ++k)192    ++k;193#pragma omp for private(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}194  for (int k = 0; k < argc; ++k)195    ++k;196#pragma omp for private(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}197  for (int k = 0; k < argc; ++k)198    ++k;199#pragma omp for private(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}200  for (int k = 0; k < argc; ++k)201    ++k;202#pragma omp for private(argc)203  for (int k = 0; k < argc; ++k)204    ++k;205#pragma omp for private(S1) // expected-error {{'S1' does not refer to a value}}206  for (int k = 0; k < argc; ++k)207    ++k;208#pragma omp for private(a, b) // expected-error {{private variable with incomplete type 'S1'}}209  for (int k = 0; k < argc; ++k)210    ++k;211#pragma omp for private(argv[1]) // expected-error {{expected variable name}}212  for (int k = 0; k < argc; ++k)213    ++k;214#pragma omp for private(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}}215  for (int k = 0; k < argc; ++k)216    ++k;217#pragma omp for private(h) // expected-error {{threadprivate or thread local variable cannot be private}}218  for (int k = 0; k < argc; ++k)219    ++k;220#pragma omp for private(B::x) // expected-error {{threadprivate or thread local variable cannot be private}}221  for (int k = 0; k < argc; ++k)222    ++k;223#pragma omp for shared(i) // expected-error {{unexpected OpenMP clause 'shared' in directive '#pragma omp for'}}224  for (int k = 0; k < argc; ++k)225    ++k;226#pragma omp parallel227  {228    int i;229#pragma omp for private(i)230    for (int k = 0; k < argc; ++k)231      ++k;232  }233#pragma omp parallel shared(i)234#pragma omp parallel private(i)235#pragma omp for private(j)236  for (int k = 0; k < argc; ++k)237    ++k;238#pragma omp for private(i)239  for (int k = 0; k < argc; ++k)240    ++k;241  static int si;242#pragma omp for private(si) // OK243  for(int k = 0; k < argc; ++k)244    si = k + 1;245 246  s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}}247  s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float>>::operator=' requested here}}248  return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}}249}250 251