diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2018-08-15 10:56:33 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2018-08-15 10:56:33 +0100 |
commit | 25b030b85a03c86a010c1d2e4bc8db25958b0515 (patch) | |
tree | 8170f9c08c76323ca31a106dd69615c9c7c0ee2f /libstdc++-v3/src | |
parent | 89bcf3fffe13eb125a14340953dbe8dd37dcd60f (diff) |
Fix single-threaded build for targets without atomics
* src/c++17/memory_resource.cc [!_GLIBCXX_HAS_GTHREADS]
(atomic_mem_res): Add unsynchronized definition for single-threaded.
From-SVN: r263554
Diffstat (limited to 'libstdc++-v3/src')
-rw-r--r-- | libstdc++-v3/src/c++17/memory_resource.cc | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/libstdc++-v3/src/c++17/memory_resource.cc b/libstdc++-v3/src/c++17/memory_resource.cc index bd8f32d931e..aa82813e645 100644 --- a/libstdc++-v3/src/c++17/memory_resource.cc +++ b/libstdc++-v3/src/c++17/memory_resource.cc @@ -88,7 +88,7 @@ namespace pmr #if ATOMIC_POINTER_LOCK_FREE == 2 using atomic_mem_res = atomic<memory_resource*>; # define _GLIBCXX_ATOMIC_MEM_RES_CAN_BE_CONSTANT_INITIALIZED -#else +#elif defined(_GLIBCXX_HAS_GTHREADS) // Can't use pointer-width atomics, define a type using a mutex instead: struct atomic_mem_res { @@ -114,6 +114,26 @@ namespace pmr return std::exchange(val, r); } }; +#else +# define _GLIBCXX_ATOMIC_MEM_RES_CAN_BE_CONSTANT_INITIALIZED + // Single-threaded, no need for synchronization + struct atomic_mem_res + { + constexpr + atomic_mem_res(memory_resource* r) : val(r) { } + + memory_resource* val; + + memory_resource* load() const + { + return val; + } + + memory_resource* exchange(memory_resource* r) + { + return std::exchange(val, r); + } + }; #endif // ATOMIC_POINTER_LOCK_FREE == 2 #ifdef _GLIBCXX_ATOMIC_MEM_RES_CAN_BE_CONSTANT_INITIALIZED |