brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.7 KiB · c9b5bac Raw
245 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 target parallel for 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 target parallel for 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) // expected-warning {{type 'S5' is not trivially copyable and not guaranteed to be mapped correctly}}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 target parallel for simd allocate(omp_thread_mem_alloc: a) private(a) private(this->a) uses_allocators(omp_thread_mem_alloc) // expected-warning {{allocator with the 'thread' trait access has unspecified behavior on 'target parallel for simd' directive}}73    for (int k = 0; k < v; ++k)74      ++this->a;75  }76  S6 &operator=(S6 &s) {77#pragma omp target parallel for 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 target parallel for 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 target parallel for 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 target parallel for simd private // expected-error {{expected '(' after 'private'}}113  for (int k = 0; k < argc; ++k)114    ++k;115#pragma omp target parallel for 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 target parallel for simd private() // expected-error {{expected expression}}119  for (int k = 0; k < argc; ++k)120    ++k;121#pragma omp target parallel for simd private(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}122  for (int k = 0; k < argc; ++k)123    ++k;124#pragma omp target parallel for 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 target parallel for 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 target parallel for 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 target parallel for 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 target parallel for 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 target parallel for simd private(argv[1]) // expected-error {{expected variable name}}140  for (int k = 0; k < argc; ++k)141    ++k;142#pragma omp target parallel for simd private(e, g, z)143  for (int k = 0; k < argc; ++k)144    ++k;145#pragma omp target parallel for 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 parallel149  {150    int v = 0;151    int i;152#pragma omp target parallel for simd private(i)153    for (int k = 0; k < argc; ++k) {154      i = k;155      v += i;156    }157  }158#pragma omp parallel shared(i)159#pragma omp parallel private(i)160#pragma omp target parallel for simd private(j)161  for (int k = 0; k < argc; ++k)162    ++k;163#pragma omp target parallel for simd private(i)164  for (int k = 0; k < argc; ++k)165    ++k;166  return 0;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); // expected-note {{in instantiation of member function 'S6<float>::S6' requested here}}181  S7<S6<float> > s7(0.0) , s7_0(1.0);182  int i, z;183  int &j = i;184#pragma omp target parallel for simd private // expected-error {{expected '(' after 'private'}}185  for (int k = 0; k < argc; ++k)186    ++k;187#pragma omp target parallel for simd 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 target parallel for simd private() // expected-error {{expected expression}}191  for (int k = 0; k < argc; ++k)192    ++k;193#pragma omp target parallel for simd private(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}194  for (int k = 0; k < argc; ++k)195    ++k;196#pragma omp target parallel for simd 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 target parallel for simd 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 target parallel for simd private(argc, z)203  for (int k = 0; k < argc; ++k)204    ++k;205#pragma omp target parallel for simd private(S1) // expected-error {{'S1' does not refer to a value}}206  for (int k = 0; k < argc; ++k)207    ++k;208#pragma omp target parallel for simd private(a, b) // expected-error {{private variable with incomplete type 'S1'}}209  for (int k = 0; k < argc; ++k)210    ++k;211#pragma omp target parallel for simd private(argv[1]) // expected-error {{expected variable name}}212  for (int k = 0; k < argc; ++k)213    ++k;214#pragma omp target parallel for simd 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 target parallel for simd private(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be private}}218  for (int k = 0; k < argc; ++k)219    ++k;220#pragma omp parallel221  {222    int i;223#pragma omp target parallel for simd private(i)224    for (int k = 0; k < argc; ++k)225      ++k;226  }227#pragma omp parallel shared(i)228#pragma omp parallel private(i)229#pragma omp target parallel for simd private(j)230  for (int k = 0; k < argc; ++k)231    ++k;232#pragma omp target parallel for simd private(i)233  for (int k = 0; k < argc; ++k)234    ++k;235  static int m;236#pragma omp target parallel for simd private(m)237  for (int k = 0; k < argc; ++k)238    m = k + 2;239 240  s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}}241  s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float>>::operator=' requested here}}242  return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}}243}244 245