https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118681

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I think this should work:

--- a/libstdc++-v3/src/c++17/memory_resource.cc
+++ b/libstdc++-v3/src/c++17/memory_resource.cc
@@ -1247,7 +1247,7 @@ namespace pmr
   synchronized_pool_resource::
   do_allocate(size_t bytes, size_t alignment)
   {
-    const auto block_size = std::max(bytes, alignment);
+    const auto block_size = std::max(std::__bit_ceil(bytes), alignment);
     const pool_options opts = _M_impl._M_opts;
     if (block_size <= opts.largest_required_pool_block)
       {
@@ -1453,7 +1453,7 @@ namespace pmr
   void*
   unsynchronized_pool_resource::do_allocate(size_t bytes, size_t alignment)
   {
-    const auto block_size = std::max(bytes, alignment);
+    const auto block_size = std::max(std::__bit_ceil(bytes), alignment);
     if (block_size <= _M_impl._M_opts.largest_required_pool_block)
       {
        // Recreate pools if release() has been called:

Reply via email to