Now that Marek has implemented constinit (and made it available
pre-C++20 as __constinit) we can use it to enforce constant init for
the globals in src/c++17/memory_resource.cc
Tested x86_64-linux, committed to trunk.
commit 0956a4644f960ad4d537e901d64ec69186ed46b4
Author: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon Sep 2 11:31:34 2019 +0000
Use __constinit keyword in libstdc++ sources
* src/c++17/memory_resource.cc: Use __constinit keyword.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@275315
138bc75d-0d04-0410-961f-82ee72b054a4
diff --git a/libstdc++-v3/src/c++17/memory_resource.cc
b/libstdc++-v3/src/c++17/memory_resource.cc
index b6698011f5c..2b64039d280 100644
--- a/libstdc++-v3/src/c++17/memory_resource.cc
+++ b/libstdc++-v3/src/c++17/memory_resource.cc
@@ -85,8 +85,8 @@ namespace pmr
~constant_init() { /* do nothing, union member is not destroyed */ }
};
- constant_init<newdel_res_t> newdel_res{};
- constant_init<null_res_t> null_res{};
+ __constinit constant_init<newdel_res_t> newdel_res{};
+ __constinit constant_init<null_res_t> null_res{};
#if ATOMIC_POINTER_LOCK_FREE == 2
using atomic_mem_res = atomic<memory_resource*>;
# define _GLIBCXX_ATOMIC_MEM_RES_CAN_BE_CONSTANT_INITIALIZED
@@ -139,7 +139,7 @@ namespace pmr
#endif // ATOMIC_POINTER_LOCK_FREE == 2
#ifdef _GLIBCXX_ATOMIC_MEM_RES_CAN_BE_CONSTANT_INITIALIZED
- constant_init<atomic_mem_res> default_res{&newdel_res.obj};
+ __constinit constant_init<atomic_mem_res> default_res{&newdel_res.obj};
#else
# include "default_resource.h"
#endif