summaryrefslogtreecommitdiff
path: root/offload/test/mapping/ptr_and_obj_motion.c
diff options
context:
space:
mode:
Diffstat (limited to 'offload/test/mapping/ptr_and_obj_motion.c')
-rw-r--r--offload/test/mapping/ptr_and_obj_motion.c43
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]);
+}