--- /dev/null
+#pragma omp requires unified_shared_memory self_maps
+
+#define MEM_SHARED
+
+#include "target-std__array-concurrent.C"
srand (time (NULL));
init (data);
+#ifndef MEM_SHARED
#pragma omp target data map (to: data[:N]) map (alloc: arr)
+#endif
{
#pragma omp target
{
--- /dev/null
+#pragma omp requires unified_shared_memory self_maps
+
+#define MEM_SHARED
+
+#include "target-std__bitset-concurrent.C"
srand (time (NULL));
init (data);
+#ifndef MEM_SHARED
#pragma omp target data map (to: data[:N]) map (alloc: _set)
+#endif
{
#pragma omp target
{
--- /dev/null
+#pragma omp requires unified_shared_memory self_maps
+
+#define MEM_SHARED
+
+#include "target-std__deque-concurrent.C"
std::deque<int> _deque;
#endif
+#ifndef MEM_SHARED
#pragma omp target data map (to: data[:N]) map (alloc: _deque)
+#endif
{
#ifndef MEM_SHARED
#pragma omp target
--- /dev/null
+#pragma omp requires unified_shared_memory self_maps
+
+#define MEM_SHARED
+
+#include "target-std__forward_list-concurrent.C"
std::forward_list<int> list;
#endif
+#ifndef MEM_SHARED
#pragma omp target data map (to: data[:N]) map (alloc: list)
+#endif
{
#ifndef MEM_SHARED
#pragma omp target
--- /dev/null
+#pragma omp requires unified_shared_memory self_maps
+
+#define MEM_SHARED
+
+#include "target-std__list-concurrent.C"
std::list<int> _list;
#endif
+#ifndef MEM_SHARED
#pragma omp target data map (to: data[:N]) map (alloc: _list)
+#endif
{
#ifndef MEM_SHARED
#pragma omp target
--- /dev/null
+#pragma omp requires unified_shared_memory self_maps
+
+#define MEM_SHARED
+
+#include "target-std__map-concurrent.C"
init (keys, true);
init (data, false);
+#ifndef MEM_SHARED
#pragma omp target enter data map (to: keys[:N], data[:N]) map (alloc: _map)
+#endif
#pragma omp target
{
_map.~map ();
#endif
+#ifndef MEM_SHARED
#pragma omp target exit data map (release: _map)
+#endif
bool ok = validate (sum, keys, data);
return ok ? 0 : 1;
--- /dev/null
+#pragma omp requires unified_shared_memory self_maps
+
+#define MEM_SHARED
+
+#include "target-std__multimap-concurrent.C"
init (keys, KEY_MAX);
init (data, RAND_MAX);
+#ifndef MEM_SHARED
#pragma omp target enter data map (to: keys[:N], data[:N]) map (alloc: _map)
+#endif
#pragma omp target
{
_map.~multimap ();
#endif
+#ifndef MEM_SHARED
#pragma omp target exit data map (release: _map)
+#endif
bool ok = validate (sum, keys, data);
return ok ? 0 : 1;
--- /dev/null
+#pragma omp requires unified_shared_memory self_maps
+
+#define MEM_SHARED
+
+#include "target-std__multiset-concurrent.C"
srand (time (NULL));
init (data);
+#ifndef MEM_SHARED
#pragma omp target data map (to: data[:N]) map (alloc: set)
+#endif
{
#pragma omp target
{
--- /dev/null
+#pragma omp requires unified_shared_memory self_maps
+
+#define MEM_SHARED
+
+#include "target-std__set-concurrent.C"
srand (time (NULL));
init (data);
+#ifndef MEM_SHARED
#pragma omp target data map (to: data[:N]) map (alloc: _set)
+#endif
{
#pragma omp target
{
--- /dev/null
+// { dg-additional-options "-std=c++20" }
+
+#pragma omp requires unified_shared_memory self_maps
+
+#define MEM_SHARED
+
+#include "target-std__span-concurrent.C"
srand (time (NULL));
init (data);
+#ifndef MEM_SHARED
#pragma omp target enter data map (to: data[:N]) map (alloc: elements, span)
+#endif
#pragma omp target
{
#endif
}
+#ifndef MEM_SHARED
#pragma omp target exit data map (release: elements, span)
+#endif
return ok ? 0 : 1;
}
--- /dev/null
+#pragma omp requires unified_shared_memory self_maps
+
+#define MEM_SHARED
+
+#include "target-std__valarray-concurrent.C"
std::valarray<int> arr;
#endif
+#ifndef MEM_SHARED
#pragma omp target data map (to: data[:N]) map (alloc: arr)
+#endif
{
#pragma omp target
{
--- /dev/null
+#pragma omp requires unified_shared_memory self_maps
+
+#define MEM_SHARED
+
+#include "target-std__vector-concurrent.C"
std::vector<int> vec;
#endif
+#ifndef MEM_SHARED
#pragma omp target data map (to: data[:N]) map (alloc: vec)
+#endif
{
#ifndef MEM_SHARED
#pragma omp target