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
This commit is contained in:
Jonathan Wakely 2018-07-24 14:03:11 +01:00 committed by Jonathan Wakely
parent ffb164c7df
commit 0568ade6f8
2 changed files with 16 additions and 6 deletions

View File

@ -1,3 +1,9 @@
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>
PR libstdc++/70940

View File

@ -459,12 +459,6 @@ namespace pmr {
};
// 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*
new_delete_resource() noexcept
@ -499,6 +493,16 @@ namespace pmr {
}
// 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*
get_default_resource() noexcept
{ return __get_default_resource().load(); }