1*ff12c006SJohannes Doerfert // RUN: %libomptarget-compilexx-run-and-check-generic 2*ff12c006SJohannes Doerfert // RUN: %libomptarget-compileoptxx-run-and-check-generic 3*ff12c006SJohannes Doerfert 4*ff12c006SJohannes Doerfert #include <cstdio> 5*ff12c006SJohannes Doerfert #include <omp.h> 6*ff12c006SJohannes Doerfert 7*ff12c006SJohannes Doerfert struct S { 8*ff12c006SJohannes Doerfert S() : i(7) {} 9*ff12c006SJohannes Doerfert int i; 10*ff12c006SJohannes Doerfert }; 11*ff12c006SJohannes Doerfert 12*ff12c006SJohannes Doerfert S s; 13*ff12c006SJohannes Doerfert #pragma omp declare target(s) 14*ff12c006SJohannes Doerfert 15*ff12c006SJohannes Doerfert int main() { 16*ff12c006SJohannes Doerfert int r; 17*ff12c006SJohannes Doerfert int Dev = omp_get_default_device(); 18*ff12c006SJohannes Doerfert void *s_dev = omp_get_mapped_ptr(&s, Dev); 19*ff12c006SJohannes Doerfert printf("Host %p, Device: %p\n", &s, s_dev); 20*ff12c006SJohannes Doerfert omp_target_memcpy(&r, s_dev, sizeof(int), 0, offsetof(S, i), 21*ff12c006SJohannes Doerfert omp_get_initial_device(), Dev); 22*ff12c006SJohannes Doerfert // CHECK: 7 23*ff12c006SJohannes Doerfert printf("%i\n", r); 24*ff12c006SJohannes Doerfert } 25