brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.8 KiB · 0cb8c01 Raw
319 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 target37#pragma omp teams38#pragma omp distribute parallel for simd private(a) private(this->a)39    for (int k = 0; k < v; ++k)40      ++this->a;41  }42};43class S5 {44  int a;45  S5() : a(0) {} // expected-note {{implicitly declared private here}}46 47public:48  S5(int v) : a(v) {}49  S5 &operator=(S5 &s) {50#pragma omp target51#pragma omp teams52#pragma omp distribute parallel for simd private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}}53    for (int k = 0; k < s.a; ++k) // expected-warning {{type 'S5' is not trivially copyable and not guaranteed to be mapped correctly}}54      ++s.a;55    return *this;56  }57};58 59template <typename T>60class S6 {61public:62  T a;63 64  S6() : a(0) {}65  S6(T v) : a(v) {66#pragma omp target67#pragma omp teams68#pragma omp distribute parallel for simd private(a) private(this->a)69    for (int k = 0; k < v; ++k)70      ++this->a;71  }72  S6 &operator=(S6 &s) {73#pragma omp target74#pragma omp teams75#pragma omp distribute parallel for simd private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}}76    for (int k = 0; k < s.a; ++k)77      ++s.a;78    return *this;79  }80};81 82template <typename T>83class S7 : public T {84  T a;85  S7() : a(0) {}86 87public:88  S7(T v) : a(v) {89#pragma omp target90#pragma omp teams91#pragma omp distribute 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 target97#pragma omp teams98#pragma omp distribute 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}}99    for (int k = 0; k < s.a.a; ++k)100      ++s.a.a;101    return *this;102  }103};104 105S3 h;106#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}}107 108template <class I, class C>109int foomain(I argc, C **argv) {110  I e(4);111  I g(5);112  int i;113  int &j = i;114#pragma omp target115#pragma omp teams116#pragma omp distribute parallel for simd private // expected-error {{expected '(' after 'private'}}117  for (int k = 0; k < argc; ++k)118    ++k;119#pragma omp target120#pragma omp teams121#pragma omp distribute parallel for simd private( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}122  for (int k = 0; k < argc; ++k)123    ++k;124#pragma omp target125#pragma omp teams126#pragma omp distribute parallel for simd private() // expected-error {{expected expression}}127  for (int k = 0; k < argc; ++k)128    ++k;129#pragma omp target130#pragma omp teams131#pragma omp distribute parallel for simd private(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}132  for (int k = 0; k < argc; ++k)133    ++k;134#pragma omp target135#pragma omp teams136#pragma omp distribute parallel for simd private(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}137  for (int k = 0; k < argc; ++k)138    ++k;139#pragma omp target140#pragma omp teams141#pragma omp distribute parallel for simd private(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}142  for (int k = 0; k < argc; ++k)143    ++k;144#pragma omp target145#pragma omp teams146#pragma omp distribute 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 '('}}147  for (int k = 0; k < argc; ++k)148    ++k;149#pragma omp target150#pragma omp teams151#pragma omp distribute parallel for simd private(S1) // expected-error {{'S1' does not refer to a value}}152  for (int k = 0; k < argc; ++k)153    ++k;154#pragma omp target155#pragma omp teams156#pragma omp distribute parallel for simd private(a, b) // expected-error {{private variable with incomplete type 'S1'}}157  for (int k = 0; k < argc; ++k)158    ++k;159#pragma omp target160#pragma omp teams161#pragma omp distribute parallel for simd private(argv[1]) // expected-error {{expected variable name}}162  for (int k = 0; k < argc; ++k)163    ++k;164#pragma omp target165#pragma omp teams166#pragma omp distribute parallel for simd private(e, g)167  for (int k = 0; k < argc; ++k)168    ++k;169#pragma omp target170#pragma omp teams171#pragma omp distribute parallel for simd private(h) // expected-error {{threadprivate or thread local variable cannot be private}}172  for (int k = 0; k < argc; ++k)173    ++k;174#pragma omp target175#pragma omp teams176#pragma omp distribute parallel for simd nowait // expected-error {{unexpected OpenMP clause 'nowait' in directive '#pragma omp distribute parallel for simd'}}177  for (int k = 0; k < argc; ++k)178    ++k;179#pragma omp parallel180  {181    int v = 0;182    int i;183#pragma omp target184#pragma omp teams185#pragma omp distribute parallel for simd private(i)186    for (int k = 0; k < argc; ++k) {187      i = k;188      v += i;189    }190  }191#pragma omp parallel shared(i)192#pragma omp parallel private(i)193#pragma omp target194#pragma omp teams195#pragma omp distribute parallel for simd private(j)196  for (int k = 0; k < argc; ++k)197    ++k;198#pragma omp target199#pragma omp teams200#pragma omp distribute parallel for simd private(i)201  for (int k = 0; k < argc; ++k)202    ++k;203  return 0;204}205 206namespace A {207double x;208#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}}209}210namespace B {211using A::x;212}213 214int main(int argc, char **argv) {215  S4 e(4);216  S5 g(5);217  S6<float> s6(0.0) , s6_0(1.0);218  S7<S6<float> > s7(0.0) , s7_0(1.0);219  int i;220  int &j = i;221#pragma omp target222#pragma omp teams223#pragma omp distribute parallel for simd private // expected-error {{expected '(' after 'private'}}224  for (int k = 0; k < argc; ++k)225    ++k;226#pragma omp target227#pragma omp teams228#pragma omp distribute parallel for simd private( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}229  for (int k = 0; k < argc; ++k)230    ++k;231#pragma omp target232#pragma omp teams233#pragma omp distribute parallel for simd private() // expected-error {{expected expression}}234  for (int k = 0; k < argc; ++k)235    ++k;236#pragma omp target237#pragma omp teams238#pragma omp distribute parallel for simd private(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}239  for (int k = 0; k < argc; ++k)240    ++k;241#pragma omp target242#pragma omp teams243#pragma omp distribute parallel for simd private(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}244  for (int k = 0; k < argc; ++k)245    ++k;246#pragma omp target247#pragma omp teams248#pragma omp distribute parallel for simd private(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}249  for (int k = 0; k < argc; ++k)250    ++k;251#pragma omp target252#pragma omp teams253#pragma omp distribute parallel for simd private(argc)254  for (int k = 0; k < argc; ++k)255    ++k;256#pragma omp target257#pragma omp teams258#pragma omp distribute parallel for simd private(S1) // expected-error {{'S1' does not refer to a value}}259  for (int k = 0; k < argc; ++k)260    ++k;261#pragma omp target262#pragma omp teams263#pragma omp distribute parallel for simd private(a, b) // expected-error {{private variable with incomplete type 'S1'}}264  for (int k = 0; k < argc; ++k)265    ++k;266#pragma omp target267#pragma omp teams268#pragma omp distribute parallel for simd private(argv[1]) // expected-error {{expected variable name}}269  for (int k = 0; k < argc; ++k)270    ++k;271#pragma omp target272#pragma omp teams273#pragma omp distribute parallel for simd private(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}}274  for (int k = 0; k < argc; ++k)275    ++k;276#pragma omp target277#pragma omp teams278#pragma omp distribute parallel for simd private(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be private}}279  for (int k = 0; k < argc; ++k)280    ++k;281#pragma omp target282#pragma omp teams283#pragma omp distribute parallel for simd nowait // expected-error {{unexpected OpenMP clause 'nowait' in directive '#pragma omp distribute parallel for simd'}}284  for (int k = 0; k < argc; ++k)285    ++k;286#pragma omp parallel287  {288    int i;289#pragma omp target290#pragma omp teams291#pragma omp distribute parallel for simd private(i)292    for (int k = 0; k < argc; ++k)293      ++k;294  }295#pragma omp parallel shared(i)296#pragma omp parallel private(i)297#pragma omp target298#pragma omp teams299#pragma omp distribute parallel for simd private(j)300  for (int k = 0; k < argc; ++k)301    ++k;302#pragma omp target303#pragma omp teams304#pragma omp distribute parallel for simd private(i)305  for (int k = 0; k < argc; ++k)306    ++k;307  static int m;308#pragma omp target309#pragma omp teams310#pragma omp distribute parallel for simd private(m)311  for (int k = 0; k < argc; ++k)312    m = k + 2;313 314  s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}}315  s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float>>::operator=' requested here}}316  return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}}317}318 319