diff options
Diffstat (limited to 'offload/test/mapping/ptr_and_obj_motion.c')
| -rw-r--r-- | offload/test/mapping/ptr_and_obj_motion.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/offload/test/mapping/ptr_and_obj_motion.c b/offload/test/mapping/ptr_and_obj_motion.c new file mode 100644 index 000000000000..8fa2c9865b4a --- /dev/null +++ b/offload/test/mapping/ptr_and_obj_motion.c @@ -0,0 +1,43 @@ +// RUN: %libomptarget-compile-run-and-check-generic + +#include <stdio.h> + +typedef struct { + double *dataptr; + int dummy1; + int dummy2; +} DV; + +void init(double vertexx[]) { +#pragma omp target map(vertexx[0 : 100]) + { + printf("In init: %lf, expected 100.0\n", vertexx[77]); + vertexx[77] = 77.0; + } +} + +void change(DV *dvptr) { +#pragma omp target map(dvptr->dataptr[0 : 100]) + { + printf("In change: %lf, expected 77.0\n", dvptr->dataptr[77]); + dvptr->dataptr[77] += 1.0; + } +} + +int main() { + double vertexx[100]; + vertexx[77] = 100.0; + + DV dv; + dv.dataptr = &vertexx[0]; + +#pragma omp target enter data map(to : vertexx[0 : 100]) + + init(vertexx); + change(&dv); + +#pragma omp target exit data map(from : vertexx[0 : 100]) + + // CHECK: Final: 78.0 + printf("Final: %lf\n", vertexx[77]); +} |
