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 Rokosint 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