1 // RUN: %libomptarget-compilexx-run-and-check-generic
2 
3 // UNSUPPORTED: x86_64-pc-linux-gnu
4 // UNSUPPORTED: x86_64-pc-linux-gnu-newDriver
5 
6 #include <cassert>
7 #include <iostream>
8 
9 int main(int argc, char *argv[]) {
10   constexpr const int num_threads = 64, N = 128;
11   int array[num_threads] = {0};
12 
13 #pragma omp parallel for
14   for (int i = 0; i < num_threads; ++i) {
15     int tmp[N];
16 
17     for (int j = 0; j < N; ++j) {
18       tmp[j] = i;
19     }
20 
21 #pragma omp target teams distribute parallel for map(tofrom : tmp)
22     for (int j = 0; j < N; ++j) {
23       tmp[j] += j;
24     }
25 
26     for (int j = 0; j < N; ++j) {
27       array[i] += tmp[j];
28     }
29   }
30 
31   // Verify
32   for (int i = 0; i < num_threads; ++i) {
33     const int ref = (0 + N - 1) * N / 2 + i * N;
34     assert(array[i] == ref);
35   }
36 
37   std::cout << "PASS\n";
38 
39   return 0;
40 }
41 
42 // CHECK: PASS
43