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