aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2024-07-10 10:29:52 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2024-07-10 22:05:22 +0100
commitc5efc6eca8e3eee7038ae218cf7e2dbe9ed9d82a (patch)
treefe988dbbe222495378317a536125a0aa1582041b
parentcda469a59e222496248025e0834a15d466f79d4a (diff)
downloadgcc-c5efc6eca8e3eee7038ae218cf7e2dbe9ed9d82a.zip
gcc-c5efc6eca8e3eee7038ae218cf7e2dbe9ed9d82a.tar.gz
gcc-c5efc6eca8e3eee7038ae218cf7e2dbe9ed9d82a.tar.bz2
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.
-rw-r--r--libstdc++-v3/include/bits/stl_bvector.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/allocator/115854.cc10
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/bool/allocator/115854.cc10
3 files changed, 21 insertions, 1 deletions
diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h
index 8685cc6..245e1c3 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 0000000..6c9016b
--- /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 0000000..14b28cc
--- /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);