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 | |
parent | 89bcf3fffe13eb125a14340953dbe8dd37dcd60f (diff) | |
download | gcc-25b030b85a03c86a010c1d2e4bc8db25958b0515.zip gcc-25b030b85a03c86a010c1d2e4bc8db25958b0515.tar.gz gcc-25b030b85a03c86a010c1d2e4bc8db25958b0515.tar.bz2 |
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
-rw-r--r-- | libstdc++-v3/ChangeLog | 5 | ||||
-rw-r--r-- | libstdc++-v3/src/c++17/memory_resource.cc | 22 |
2 files changed, 26 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 182c0ed..15d2eb5 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2018-08-15 Jonathan Wakely <jwakely@redhat.com> + + * src/c++17/memory_resource.cc [!_GLIBCXX_HAS_GTHREADS] + (atomic_mem_res): Add unsynchronized definition for single-threaded. + 2018-08-14 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/86954 diff --git a/libstdc++-v3/src/c++17/memory_resource.cc b/libstdc++-v3/src/c++17/memory_resource.cc index bd8f32d..aa82813 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 |