xref: /llvm-project/offload/test/offloading/ctor_dtor_api.cpp (revision ff12c0061b7dbb8a82681a0e02a513bb84b1d143)
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