Commit 0568ade6 by Jonathan Wakely Committed by Jonathan Wakely

PR libstdc++/70966 fix lifetime bug for default resource

	PR libstdc++/70966
	* include/experimental/memory_resource (__get_default_resource): Use
	placement new to create an object with dynamic storage duration.

From-SVN: r262943
parent ffb164c7
2018-07-24 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/70966
* include/experimental/memory_resource (__get_default_resource): Use
placement new to create an object with dynamic storage duration.
2018-07-23 Jonathan Wakely <jwakely@redhat.com> 2018-07-23 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/70940 PR libstdc++/70940
......
...@@ -459,12 +459,6 @@ namespace pmr { ...@@ -459,12 +459,6 @@ namespace pmr {
}; };
// Global memory resources // Global memory resources
inline std::atomic<memory_resource*>&
__get_default_resource()
{
static atomic<memory_resource*> _S_default_resource(new_delete_resource());
return _S_default_resource;
}
inline memory_resource* inline memory_resource*
new_delete_resource() noexcept new_delete_resource() noexcept
...@@ -499,6 +493,16 @@ namespace pmr { ...@@ -499,6 +493,16 @@ namespace pmr {
} }
// The default memory resource // The default memory resource
inline std::atomic<memory_resource*>&
__get_default_resource()
{
using type = atomic<memory_resource*>;
alignas(type) static unsigned char __buf[sizeof(type)];
static type* __r = new(__buf) type(new_delete_resource());
return *__r;
}
inline memory_resource* inline memory_resource*
get_default_resource() noexcept get_default_resource() noexcept
{ return __get_default_resource().load(); } { return __get_default_resource().load(); }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment