xref: /llvm-project/offload/test/mapping/declare_mapper_target_data.cpp (revision 330d8983d25d08580fc1642fea48b2473f47a9da)
1 // RUN: %libomptarget-compile-run-and-check-generic
2 
3 #include <cstdio>
4 #include <cstdlib>
5 
6 #define NUM 1024
7 
8 class C {
9 public:
10   int *a;
11 };
12 
13 #pragma omp declare mapper(id : C s) map(s.a[0 : NUM])
14 
main()15 int main() {
16   C c;
17   c.a = (int *)malloc(sizeof(int) * NUM);
18   for (int i = 0; i < NUM; i++) {
19     c.a[i] = 1;
20   }
21 #pragma omp target data map(mapper(id), tofrom : c)
22   {
23 #pragma omp target teams distribute parallel for
24     for (int i = 0; i < NUM; i++) {
25       ++c.a[i];
26     }
27   }
28   int sum = 0;
29   for (int i = 0; i < NUM; i++) {
30     sum += c.a[i];
31   }
32   // CHECK: Sum = 2048
33   printf("Sum = %d\n", sum);
34   return 0;
35 }
36