brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 59deddf Raw
81 lines · cpp
1// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -verify %s2 3// We just want to try out a range for statement... this seems a bit OTT.4template<typename T>5class fakevector {6  T *contents;7  long size;8public:9  fakevector(long sz) : size(sz) {10    contents = new T[sz];11  }12  ~fakevector() {13    delete[] contents;14  }15  T& operator[](long x) { return contents[x]; }16  typedef T *iterator;17  fakevector<T>::iterator begin() {18    return &contents[0];19  }20  fakevector<T>::iterator end() {21    return &contents[size];22  }23};24 25void func( double *A, int N, int M, int NB ) {26#pragma omp parallel27  {28    int nblks = (N-1)/NB;29    int lnb = ((N-1)/NB)*NB;30#pragma omp for collapse(2)31    for (int jblk = 0 ; jblk < nblks ; jblk++ ) {32      int jb = (jblk == nblks - 1 ? lnb : NB);33      for (int jk = 0; jk < N; jk+=jb) {  // expected-error{{cannot use variable 'jb' in collapsed imperfectly-nested loop increment statement}}34      }35    }36 37#pragma omp for collapse(2)38    for (int a = 0; a < N; a++) {39        for (int b = 0; b < M; b++) {40          int cx = a+b < NB ? a : b;41          for (int c = 0; c < cx; c++) {42          }43        }44    }45 46    fakevector<float> myvec{N};47#pragma omp for collapse(2)48    for (auto &a : myvec) {49      fakevector<float> myvec3{M};50      for (auto &b : myvec3) {  // expected-error{{cannot use variable 'myvec3' in collapsed imperfectly-nested loop init statement}}51      }52    }53 54    fakevector<float> myvec2{M};55 56#pragma omp for collapse(3)57    for (auto &a : myvec) {58      for (auto &b : myvec2) {59        int cx = a < b ? N : M;60        for (int c = 0; c < cx; c++) {  // expected-error {{cannot use variable 'cx' in collapsed imperfectly-nested loop condition statement}}61        }62      }63    }64 65#pragma omp for collapse(3)66    for (auto &a : myvec) {67      int cx = a < 5 ? M : N;68      for (auto &b : myvec2) {69        for (int c = 0; c < cx; c++) {  // expected-error{{cannot use variable 'cx' in collapsed imperfectly-nested loop condition statement}}70        }71      }72    }73  }74}75 76int main(void) {77  double arr[256];78  func (arr, 16, 16, 16);79  return 0;80}81