From 6ca40b9e86a7eaf6ce7c42e4896b9f74ef5c64fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Wed, 21 Oct 2020 22:49:25 +0200 Subject: [PATCH] Use custom placement new to support -fno-exceptions --- include/boost/container/detail/adaptive_node_pool_impl.hpp | 7 ++++--- include/boost/container/detail/multiallocation_chain.hpp | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/boost/container/detail/adaptive_node_pool_impl.hpp b/include/boost/container/detail/adaptive_node_pool_impl.hpp index b207092..fdb0043 100644 --- a/include/boost/container/detail/adaptive_node_pool_impl.hpp +++ b/include/boost/container/detail/adaptive_node_pool_impl.hpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -662,7 +663,7 @@ class private_adaptive_node_pool_impl_common this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment); throw_bad_alloc(); } - block_info_t &c_info = *new(mem_address)block_info_t(); + block_info_t &c_info = *new(mem_address, boost_container_new_t())block_info_t(); mem_address += HdrSize; this->priv_fill_chain_remaining_to_block(chain, target_elem_in_chain, c_info, mem_address, real_num_node, real_node_size); const size_type free_nodes = c_info.free_nodes.size(); @@ -703,7 +704,7 @@ class private_adaptive_node_pool_impl_common } //First initialize header information on the last subblock char *hdr_addr = mem_address + real_block_alignment*(num_subblocks-1); - block_info_t &c_info = *new(hdr_addr)block_info_t(); + block_info_t &c_info = *new(hdr_addr, boost_container_new_t())block_info_t(); //Some structural checks BOOST_ASSERT(static_cast(&static_cast(c_info).hdr_offset) == static_cast(&c_info)); (void)c_info; @@ -711,7 +712,7 @@ class private_adaptive_node_pool_impl_common ; subblock < maxsubblock ; ++subblock, mem_address += real_block_alignment){ //Initialize header offset mark - new(mem_address) hdr_offset_holder(size_type(hdr_addr - mem_address)); + new(mem_address, boost_container_new_t()) hdr_offset_holder(size_type(hdr_addr - mem_address)); const size_type elements_per_subblock = (subblock != (maxsubblock - 1)) ? elements_per_subblock_mid : elements_per_subblock_end; this->priv_fill_chain_remaining_to_block (chain, target_elem_in_chain, c_info, mem_address + HdrOffsetSize, elements_per_subblock, real_node_size); diff --git a/include/boost/container/detail/multiallocation_chain.hpp b/include/boost/container/detail/multiallocation_chain.hpp index c7d94f4..20f588f 100644 --- a/include/boost/container/detail/multiallocation_chain.hpp +++ b/include/boost/container/detail/multiallocation_chain.hpp @@ -27,6 +27,7 @@ #include #include #include +#include // intrusive #include #include @@ -152,7 +153,7 @@ class basic_multiallocation_chain char_ptr prev_elem = elem; elem += unit_bytes; for(size_type i = 0; i != num_units-1; ++i, elem += unit_bytes){ - ::new (boost::movelib::to_raw_pointer(prev_elem)) void_pointer(elem); + ::new (boost::movelib::to_raw_pointer(prev_elem), boost_container_new_t()) void_pointer(elem); prev_elem = elem; } slist_impl_.incorporate_after(after_this, to_node_ptr(b), to_node_ptr(prev_elem), num_units);