brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.4 KiB · ba80c8e Raw
295 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp %s -Wuninitialized2// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp -fopenmp-version=52 -DOMP52 %s -Wuninitialized3 4// RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized5// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp-simd -fopenmp-version=52 -DOMP52 %s -Wuninitialized6 7extern int omp_default_mem_alloc;8 9void xxx(int argc) {10  int i, lin, step_sz; // expected-note {{initialize the variable 'lin' to silence this warning}} expected-note {{initialize the variable 'step_sz' to silence this warning}}11#pragma omp parallel for linear(lin : step_sz) // expected-warning {{variable 'lin' is uninitialized when used here}} expected-warning {{variable 'step_sz' is uninitialized when used here}}12  for (i = 0; i < 10; ++i)13    ;14}15 16namespace X {17int x;18};19 20struct B {21  static int ib; // expected-note {{'B::ib' declared here}}22  static int bfoo() { return 8; }23};24 25int bfoo() { return 4; }26 27int z;28const int C1 = 1;29const int C2 = 2;30void test_linear_colons() {31  int B = 0;32#pragma omp parallel for linear(B : bfoo())33  for (int i = 0; i < 10; ++i)34    ;35// expected-error@+1 {{unexpected ':' in nested name specifier; did you mean '::'}}36#pragma omp parallel for linear(B::ib : B : bfoo())37  for (int i = 0; i < 10; ++i)38    ;39// expected-error@+1 {{use of undeclared identifier 'ib'; did you mean 'B::ib'}}40#pragma omp parallel for linear(B : ib)41  for (int i = 0; i < 10; ++i)42    ;43// expected-error@+1 {{unexpected ':' in nested name specifier; did you mean '::'?}}44#pragma omp parallel for linear(z : B : ib)45  for (int i = 0; i < 10; ++i)46    ;47#pragma omp parallel for linear(B : B::bfoo())48  for (int i = 0; i < 10; ++i)49    ;50#pragma omp parallel for linear(X::x : ::z)51  for (int i = 0; i < 10; ++i)52    ;53#pragma omp parallel for linear(B, ::z, X::x)54  for (int i = 0; i < 10; ++i)55    ;56#pragma omp parallel for linear(::z) 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 '('}}57  for (int i = 0; i < 10; ++i)58    ;59// expected-error@+1 {{expected variable name}}60#pragma omp parallel for linear(B::bfoo())61  for (int i = 0; i < 10; ++i)62    ;63#pragma omp parallel for linear(B::ib, B : C1 + C2)64  for (int i = 0; i < 10; ++i)65    ;66}67 68template <int L, class T, class N>69T test_template(T *arr, N num) {70  N i;71  T sum = (T)0;72  T ind2 = -num * L; // expected-note {{'ind2' defined here}}73// expected-error@+1 {{argument of a linear clause should be of integral or pointer type}}74#pragma omp parallel for linear(ind2 : L)75  for (i = 0; i < num; ++i) {76    T cur = arr[(int)ind2];77    ind2 += L;78    sum += cur;79  }80  return T();81}82 83template <int LEN>84int test_warn() {85  int ind2 = 0;86// expected-warning@+1 {{zero linear step ('ind2' should probably be const)}}87#pragma omp parallel for linear(ind2 : LEN)88  for (int i = 0; i < 100; i++) {89    ind2 += LEN;90  }91  return ind2;92}93 94struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}95extern S1 a;96class S2 {97  mutable int a;98 99public:100  S2() : a(0) {}101};102const S2 b; // expected-note 2 {{'b' defined here}}103const S2 ba[5];104class S3 {105  int a;106 107public:108  S3() : a(0) {}109};110const S3 ca[5];111class S4 {112  int a;113  S4();114 115public:116  S4(int v) : a(v) {}117};118class S5 {119  int a;120  S5() : a(0) {}121 122public:123  S5(int v) : a(v) {}124};125 126S3 h;127#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}}128 129template <class I, class C>130int foomain(I argc, C **argv) {131  I e(4);132  I g(5);133  int i, z;134  int &j = i;135#pragma omp parallel for linear // expected-error {{expected '(' after 'linear'}}136  for (int k = 0; k < argc; ++k)137    ++k;138#pragma omp parallel for linear( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}139  for (int k = 0; k < argc; ++k)140    ++k;141#pragma omp parallel for linear() // expected-error {{expected expression}}142  for (int k = 0; k < argc; ++k)143    ++k;144#pragma omp parallel for linear(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}145  for (int k = 0; k < argc; ++k)146    ++k;147#pragma omp parallel for linear(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}148  for (int k = 0; k < argc; ++k)149    ++k;150#pragma omp parallel for linear(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}151  for (int k = 0; k < argc; ++k)152    ++k;153#pragma omp parallel for linear(argc, z : 5)154  for (int k = 0; k < argc; ++k)155    ++k;156#pragma omp parallel for linear(S1) // expected-error {{'S1' does not refer to a value}}157  for (int k = 0; k < argc; ++k)158    ++k;159// expected-error@+2 {{linear variable with incomplete type 'S1'}}160// expected-error@+1 {{argument of a linear clause should be of integral or pointer type, not 'S2'}}161#pragma omp parallel for linear(a, b : B::ib)162  for (int k = 0; k < argc; ++k)163    ++k;164#pragma omp parallel for linear(argv[1]) // expected-error {{expected variable name}}165  for (int k = 0; k < argc; ++k)166    ++k;167#pragma omp parallel for linear(e, g)168  for (int k = 0; k < argc; ++k)169    ++k;170#pragma omp parallel for linear(h) // expected-error {{threadprivate or thread local variable cannot be linear}}171  for (int k = 0; k < argc; ++k)172    ++k;173#pragma omp parallel for linear(i)174  for (int k = 0; k < argc; ++k)175    ++k;176#pragma omp parallel177  {178    int v = 0;179    int i;180#pragma omp parallel for linear(v : i)181    for (int k = 0; k < argc; ++k) {182      i = k;183      v += i;184    }185  }186#pragma omp parallel for linear(j)187  for (int k = 0; k < argc; ++k)188    ++k;189  int v = 0;190#pragma omp parallel for linear(v : j)191  for (int k = 0; k < argc; ++k) {192    ++k;193    v += j;194  }195#pragma omp parallel for linear(i)196  for (int k = 0; k < argc; ++k)197    ++k;198  return 0;199}200 201namespace A {202double x;203#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}}204}205namespace C {206using A::x;207}208 209int main(int argc, char **argv) {210  double darr[100];211  // expected-note@+1 {{in instantiation of function template specialization 'test_template<-4, double, int>' requested here}}212  test_template<-4>(darr, 4);213  // expected-note@+1 {{in instantiation of function template specialization 'test_warn<0>' requested here}}214  test_warn<0>();215 216  S4 e(4); // expected-note {{'e' defined here}}217  S5 g(5); // expected-note {{'g' defined here}}218  int i, z;219  int &j = i;220#pragma omp parallel for linear // expected-error {{expected '(' after 'linear'}}221  for (int k = 0; k < argc; ++k)222    ++k;223#pragma omp parallel for linear( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}224  for (int k = 0; k < argc; ++k)225    ++k;226#pragma omp parallel for linear() // expected-error {{expected expression}}227  for (int k = 0; k < argc; ++k)228    ++k;229#pragma omp parallel for linear(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}230  for (int k = 0; k < argc; ++k)231    ++k;232#pragma omp parallel for linear(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}233  for (int k = 0; k < argc; ++k)234    ++k;235#pragma omp parallel for linear(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}236  for (int k = 0; k < argc; ++k)237    ++k;238#pragma omp parallel for linear(argc, z)239  for (int k = 0; k < argc; ++k)240    ++k;241#pragma omp parallel for linear(S1) // expected-error {{'S1' does not refer to a value}}242  for (int k = 0; k < argc; ++k)243    ++k;244// expected-error@+2 {{linear variable with incomplete type 'S1'}}245// expected-error@+1 {{argument of a linear clause should be of integral or pointer type, not 'S2'}}246#pragma omp parallel for linear(a, b)247  for (int k = 0; k < argc; ++k)248    ++k;249#pragma omp parallel for linear(argv[1]) // expected-error {{expected variable name}}250  for (int k = 0; k < argc; ++k)251    ++k;252// expected-error@+2 {{argument of a linear clause should be of integral or pointer type, not 'S4'}}253// expected-error@+1 {{argument of a linear clause should be of integral or pointer type, not 'S5'}}254#pragma omp parallel for linear(e, g)255  for (int k = 0; k < argc; ++k)256    ++k;257#pragma omp parallel for linear(h, C::x) // expected-error 2 {{threadprivate or thread local variable cannot be linear}}258  for (int k = 0; k < argc; ++k)259    ++k;260#pragma omp parallel261  {262    int i;263#pragma omp parallel for linear(i)264    for (int k = 0; k < argc; ++k)265      ++k;266#ifdef OMP52267#pragma omp parallel for linear(i : step(4))268#else269#pragma omp parallel for linear(i : 4)270#endif271    for (int k = 0; k < argc; ++k) {272      ++k;273      i += 4;274    }275  }276#ifdef OMP52277#pragma omp for linear(j: step() //omp52-error 2 {{expected expression}} omp52-error{{expected ')'}} omp52-note{{to match this '('}}278#else279#pragma omp for linear(j)280#endif281  for (int k = 0; k < argc; ++k)282    ++k;283#ifdef OMP52284  #pragma omp for linear(i: step(1), step(2)) // omp52-error {{multiple 'step size' found in linear clause}}285#else286  #pragma omp for linear(i)287#endif288  for (int k = 0; k < argc; ++k)289    ++k;290 291  foomain<int, char>(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}}292  return 0;293}294 295