1*24f836e8SJoachim Protze // RUN: %libomptarget-compile-run-and-check-generic
2140ab574SGeorge Rokos 
3140ab574SGeorge Rokos #include <cstdio>
4140ab574SGeorge Rokos #include <cstdlib>
5140ab574SGeorge Rokos 
6140ab574SGeorge Rokos #define NUM 1024
7140ab574SGeorge Rokos 
8140ab574SGeorge Rokos class C {
9140ab574SGeorge Rokos public:
10140ab574SGeorge Rokos   int *a;
11140ab574SGeorge Rokos };
12140ab574SGeorge Rokos 
13140ab574SGeorge Rokos #pragma omp declare mapper(id: C s) map(s.a[0:NUM])
14140ab574SGeorge Rokos 
main()15140ab574SGeorge Rokos int main() {
16140ab574SGeorge Rokos   C c;
17140ab574SGeorge Rokos   c.a = (int*) malloc(sizeof(int)*NUM);
18140ab574SGeorge Rokos   for (int i = 0; i < NUM; i++) {
19140ab574SGeorge Rokos     c.a[i] = 1;
20140ab574SGeorge Rokos   }
21140ab574SGeorge Rokos   #pragma omp target data map(mapper(id),tofrom: c)
22140ab574SGeorge Rokos   {
23140ab574SGeorge Rokos     #pragma omp target teams distribute parallel for
24140ab574SGeorge Rokos     for (int i = 0; i < NUM; i++) {
25140ab574SGeorge Rokos       ++c.a[i];
26140ab574SGeorge Rokos     }
27140ab574SGeorge Rokos   }
28140ab574SGeorge Rokos   int sum = 0;
29140ab574SGeorge Rokos   for (int i = 0; i < NUM; i++) {
30140ab574SGeorge Rokos     sum += c.a[i];
31140ab574SGeorge Rokos   }
32140ab574SGeorge Rokos   // CHECK: Sum = 2048
33140ab574SGeorge Rokos   printf("Sum = %d\n", sum);
34140ab574SGeorge Rokos   return 0;
35140ab574SGeorge Rokos }
36140ab574SGeorge Rokos 
37