| ! Basic test of use_device_ptr, checking if the appropriate | |
| ! addresses are maintained across target boundaries | |
| ! REQUIRES: clang, flang, amdgcn-amd-amdhsa | |
| ! RUN: %clang-generic -c %S/../../Inputs/target-use-dev-ptr.c \ | |
| ! RUN: -o target-use-dev-ptr_c.o | |
| ! RUN: %libomptarget-compile-fortran-generic target-use-dev-ptr_c.o | |
| ! RUN: %t | %fcheck-generic | |
| program use_device_test | |
| use iso_c_binding | |
| interface | |
| type(c_ptr) function get_ptr() BIND(C) | |
| USE, intrinsic :: iso_c_binding | |
| implicit none | |
| end function get_ptr | |
| integer(c_int) function check_result(host, dev) BIND(C) | |
| USE, intrinsic :: iso_c_binding | |
| implicit none | |
| type(c_ptr), value, intent(in) :: host, dev | |
| end function check_result | |
| end interface | |
| type(c_ptr) :: device_ptr, x | |
| x = get_ptr() | |
| device_ptr = x | |
| !$omp target data map(tofrom: x) use_device_ptr(x) | |
| device_ptr = x | |
| !$omp end target data | |
| print *, check_result(x, device_ptr) | |
| end program use_device_test | |
| ! CHECK: SUCCESS |