https://gcc.gnu.org/g:d166c3ecf633a939777d02bc5c9ad4e2449e6d98

commit r13-9128-gd166c3ecf633a939777d02bc5c9ad4e2449e6d98
Author: Jonathan Wakely <[email protected]>
Date:   Wed Jul 10 10:29:52 2024 +0100

    libstdc++: Use direct-initialization for std::vector<bool>'s allocator 
[PR115854]
    
    The consensus in the standard committee is that this change shouldn't be
    necessary, and the Allocator requirements should require conversions
    between rebound allocators to be implicit. But we can make it work for
    now anyway.
    
    libstdc++-v3/ChangeLog:
    
            PR libstdc++/115854
            * include/bits/stl_bvector.h (_Bvector_base): Convert allocator
            to rebound type explicitly.
            * testsuite/23_containers/vector/allocator/115854.cc: New test.
            * testsuite/23_containers/vector/bool/allocator/115854.cc: New test.
    
    (cherry picked from commit c5efc6eca8e3eee7038ae218cf7e2dbe9ed9d82a)

Diff:
---
 libstdc++-v3/include/bits/stl_bvector.h                        |  2 +-
 .../testsuite/23_containers/vector/allocator/115854.cc         | 10 ++++++++++
 .../testsuite/23_containers/vector/bool/allocator/115854.cc    | 10 ++++++++++
 3 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/libstdc++-v3/include/bits/stl_bvector.h 
b/libstdc++-v3/include/bits/stl_bvector.h
index 63e416053e0f..a8fdc7bc4255 100644
--- a/libstdc++-v3/include/bits/stl_bvector.h
+++ b/libstdc++-v3/include/bits/stl_bvector.h
@@ -654,7 +654,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
 
       _GLIBCXX20_CONSTEXPR
       _Bvector_base(const allocator_type& __a)
-      : _M_impl(__a) { }
+      : _M_impl(_Bit_alloc_type(__a)) { }
 
 #if __cplusplus >= 201103L
       _Bvector_base(_Bvector_base&&) = default;
diff --git a/libstdc++-v3/testsuite/23_containers/vector/allocator/115854.cc 
b/libstdc++-v3/testsuite/23_containers/vector/allocator/115854.cc
new file mode 100644
index 000000000000..6c9016b311f2
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/allocator/115854.cc
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+
+#include <vector>
+#include <testsuite_allocator.h>
+
+__gnu_test::ExplicitConsAlloc<int> alloc;
+std::vector<int, __gnu_test::ExplicitConsAlloc<int>> v;
+std::vector<int, __gnu_test::ExplicitConsAlloc<int>> v1(alloc);
+std::vector<int, __gnu_test::ExplicitConsAlloc<int>> v2(v1, alloc);
+std::vector<int, __gnu_test::ExplicitConsAlloc<int>> v3(std::move(v1), alloc);
diff --git 
a/libstdc++-v3/testsuite/23_containers/vector/bool/allocator/115854.cc 
b/libstdc++-v3/testsuite/23_containers/vector/bool/allocator/115854.cc
new file mode 100644
index 000000000000..14b28cc3e964
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/bool/allocator/115854.cc
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+
+#include <vector>
+#include <testsuite_allocator.h>
+
+__gnu_test::ExplicitConsAlloc<bool> alloc;
+std::vector<bool, __gnu_test::ExplicitConsAlloc<bool>> v;
+std::vector<bool, __gnu_test::ExplicitConsAlloc<bool>> v1(alloc);
+std::vector<bool, __gnu_test::ExplicitConsAlloc<bool>> v2(v1, alloc);
+std::vector<bool, __gnu_test::ExplicitConsAlloc<bool>> v3(std::move(v1), 
alloc);

Reply via email to