+2023-02-23 Andrew Stubbs <ams@codesourcery.com>
+
+ * target.c (gomp_attach_pointer): Check for USM.
+ * testsuite/libgomp.fortran/usm-3.f90: New test.
+
2023-02-22 Tobias Burnus <tobias@codesourcery.com>
* testsuite/libgomp.fortran/target-enter-data-3.f90: Uncomment
gomp_fatal ("attempt to attach null pointer");
}
+ if (devicep->is_usm_ptr_func
+ && devicep->is_usm_ptr_func ((void*)(target + bias)))
+ /* Nothing to do here. */
+ return;
+
s.host_start = target + bias;
s.host_end = s.host_start + 1;
tn = splay_tree_lookup (mem_map, &s);
--- /dev/null
+! { dg-do run }
+! { dg-require-effective-target omp_usm }
+
+! Ensure that derived types containing allocated values work
+! with Unified Shared Memory.
+
+program usm
+!$omp requires unified_shared_memory
+ use iso_fortran_env
+ implicit none
+
+ type :: struct
+ real(real64), allocatable :: v(:)
+ end type struct
+
+ integer :: index
+ type(struct) :: s
+
+ real(real64), allocatable :: expected(:)
+
+ allocate(s%v(100))
+ do index = 1, size(s%v)
+ s%v(index) = index
+ end do
+ allocate(expected, mold=s%v)
+ expected = s%v - 1._real64
+
+ !$omp target
+ s%v = s%v - 1._real64
+ !$omp end target
+
+ if (any(s%v /= expected)) STOP 1
+end program usm