brintos

brintos / llvm-project-archived public Read only

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