[libcxx-commits] [libcxx] [libc++][test] LWG2593: Moved-from state of Allocators (PR #107344)
A. Jiang via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Sep 4 19:32:48 PDT 2024
https://github.com/frederick-vs-ja created https://github.com/llvm/llvm-project/pull/107344
The resolution of LWG2593 didn't require the standard library implementation to change. It merely strengthened requirements on user-defined allocator types and allowed the implementation to make stronger assumptions. The status is tentatively set to Nothing To Do.
However, `test_allocator` in libc++'s test suit needs to be fixed to conform to the strengthened requirements.
Closes #100220.
>From b043476d4c23912557e78655b0503245708be3f8 Mon Sep 17 00:00:00 2001
From: "A. Jiang" <de34 at live.cn>
Date: Thu, 5 Sep 2024 10:30:28 +0800
Subject: [PATCH] [libc++][test] LWG2593: Moved-from state of Allocators
The resolution of LWG2593 didn't require the standard library
implementation to change. It merely strengthened requirements on
user-defined allocator types and allowed the implementation to make
stronger assumptions. The status is tentatively set to Nothing To Do.
However, `test_allocator` in libc++'s test suit needs to be fixed to
conform to the strengthened requirements.
---
libcxx/docs/Status/Cxx20Issues.csv | 2 +-
.../associative/map/map.cons/move.pass.cpp | 4 ++--
.../multimap/multimap.cons/move.pass.cpp | 4 ++--
.../multiset/multiset.cons/move.pass.cpp | 4 ++--
.../associative/set/set.cons/move.pass.cpp | 4 ++--
.../allocator_move.pass.cpp | 17 +++++++++--------
.../sequences/deque/deque.cons/move.pass.cpp | 2 +-
.../sequences/vector.bool/move.pass.cpp | 17 +++++++++--------
.../sequences/vector/vector.cons/move.pass.cpp | 17 +++++++++--------
libcxx/test/support/test_allocator.h | 1 -
10 files changed, 37 insertions(+), 35 deletions(-)
diff --git a/libcxx/docs/Status/Cxx20Issues.csv b/libcxx/docs/Status/Cxx20Issues.csv
index e5d2498473ecde..c79289968811bd 100644
--- a/libcxx/docs/Status/Cxx20Issues.csv
+++ b/libcxx/docs/Status/Cxx20Issues.csv
@@ -1,7 +1,7 @@
"Issue #","Issue Name","Meeting","Status","First released version","Notes"
"`LWG2070 <https://wg21.link/LWG2070>`__","``allocate_shared``\ should use ``allocator_traits<A>::construct``\ ","2017-07 (Toronto)","|Nothing To Do|","","Resolved by `P0674R1 <https://wg21.link/P0674R1>`__"
"`LWG2444 <https://wg21.link/LWG2444>`__","Inconsistent complexity for ``std::sort_heap``\ ","2017-07 (Toronto)","|Nothing To Do|","",""
-"`LWG2593 <https://wg21.link/LWG2593>`__","Moved-from state of Allocators","2017-07 (Toronto)","","",""
+"`LWG2593 <https://wg21.link/LWG2593>`__","Moved-from state of Allocators","2017-07 (Toronto)","|Nothing To Do|","",""
"`LWG2597 <https://wg21.link/LWG2597>`__","``std::log``\ misspecified for complex numbers","2017-07 (Toronto)","","",""
"`LWG2783 <https://wg21.link/LWG2783>`__","``stack::emplace()``\ and ``queue::emplace()``\ should return ``decltype(auto)``\ ","2017-07 (Toronto)","|Complete|","",""
"`LWG2932 <https://wg21.link/LWG2932>`__","Constraints on parallel algorithm implementations are underspecified","2017-07 (Toronto)","","",""
diff --git a/libcxx/test/std/containers/associative/map/map.cons/move.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/move.pass.cpp
index 0e68ba4a17fe6e..0afe64a93d7bdd 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/move.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/move.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
assert(m.size() == 0);
assert(std::distance(m.begin(), m.end()) == 0);
- assert(mo.get_allocator() == A(test_alloc_base::moved_value));
+ assert(mo.get_allocator() == A(7));
assert(mo.key_comp() == C(5));
assert(mo.size() == 0);
assert(std::distance(mo.begin(), mo.end()) == 0);
@@ -65,7 +65,7 @@ int main(int, char**)
assert(*std::next(m.begin()) == V(2, 1));
assert(*std::next(m.begin(), 2) == V(3, 1));
- assert(mo.get_allocator() == A(test_alloc_base::moved_value));
+ assert(mo.get_allocator() == A(7));
assert(mo.key_comp() == C(5));
assert(mo.size() == 0);
assert(std::distance(mo.begin(), mo.end()) == 0);
diff --git a/libcxx/test/std/containers/associative/multimap/multimap.cons/move.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.cons/move.pass.cpp
index f4170fb56229d9..6458231e9a4d3c 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.cons/move.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.cons/move.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
assert(m.size() == 0);
assert(std::distance(m.begin(), m.end()) == 0);
- assert(mo.get_allocator() == A(test_alloc_base::moved_value));
+ assert(mo.get_allocator() == A(7));
assert(mo.key_comp() == C(5));
assert(mo.size() == 0);
assert(std::distance(mo.begin(), mo.end()) == 0);
@@ -71,7 +71,7 @@ int main(int, char**)
assert(*std::next(m.begin(), 7) == V(3, 1.5));
assert(*std::next(m.begin(), 8) == V(3, 2));
- assert(mo.get_allocator() == A(test_alloc_base::moved_value));
+ assert(mo.get_allocator() == A(7));
assert(mo.key_comp() == C(5));
assert(mo.size() == 0);
assert(std::distance(mo.begin(), mo.end()) == 0);
diff --git a/libcxx/test/std/containers/associative/multiset/multiset.cons/move.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.cons/move.pass.cpp
index 9b265b3539afd6..65d297d3bfd45d 100644
--- a/libcxx/test/std/containers/associative/multiset/multiset.cons/move.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/multiset.cons/move.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
assert(m.size() == 0);
assert(std::distance(m.begin(), m.end()) == 0);
- assert(mo.get_allocator() == A(test_alloc_base::moved_value));
+ assert(mo.get_allocator() == A(7));
assert(mo.key_comp() == C(5));
assert(mo.size() == 0);
assert(std::distance(mo.begin(), mo.end()) == 0);
@@ -72,7 +72,7 @@ int main(int, char**)
assert(*std::next(m.begin(), 7) == 3);
assert(*std::next(m.begin(), 8) == 3);
- assert(mo.get_allocator() == A(test_alloc_base::moved_value));
+ assert(mo.get_allocator() == A(7));
assert(mo.key_comp() == C(5));
assert(mo.size() == 0);
assert(std::distance(mo.begin(), mo.end()) == 0);
diff --git a/libcxx/test/std/containers/associative/set/set.cons/move.pass.cpp b/libcxx/test/std/containers/associative/set/set.cons/move.pass.cpp
index 7fa0f8da4d623d..3824ea2d322b8a 100644
--- a/libcxx/test/std/containers/associative/set/set.cons/move.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/set.cons/move.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
assert(m.size() == 0);
assert(std::distance(m.begin(), m.end()) == 0);
- assert(mo.get_allocator() == A(test_alloc_base::moved_value));
+ assert(mo.get_allocator() == A(7));
assert(mo.key_comp() == C(5));
assert(mo.size() == 0);
assert(std::distance(mo.begin(), mo.end()) == 0);
@@ -66,7 +66,7 @@ int main(int, char**)
assert(*std::next(m.begin()) == 2);
assert(*std::next(m.begin(), 2) == 3);
- assert(mo.get_allocator() == A(test_alloc_base::moved_value));
+ assert(mo.get_allocator() == A(7));
assert(mo.key_comp() == C(5));
assert(mo.size() == 0);
assert(std::distance(mo.begin(), mo.end()) == 0);
diff --git a/libcxx/test/std/containers/container.requirements/container.requirements.general/allocator_move.pass.cpp b/libcxx/test/std/containers/container.requirements/container.requirements.general/allocator_move.pass.cpp
index cc8949e751dd0e..5f2f3cfe16588d 100644
--- a/libcxx/test/std/containers/container.requirements/container.requirements.general/allocator_move.pass.cpp
+++ b/libcxx/test/std/containers/container.requirements/container.requirements.general/allocator_move.pass.cpp
@@ -50,14 +50,15 @@ void test(int expected_num_allocs = 1) {
assert(alloc_stats.copied == 0);
assert(alloc_stats.moved == num_stored_allocs);
{
- const AllocT& a = v.get_allocator();
- assert(a.get_id() == test_alloc_base::moved_value);
- assert(a.get_data() == test_alloc_base::moved_value);
- }
- {
- const AllocT& a = v2.get_allocator();
- assert(a.get_id() == 101);
- assert(a.get_data() == 42);
+ const AllocT& a1 = v.get_allocator();
+ assert(a1.get_id() == test_alloc_base::moved_value);
+ assert(a1.get_data() == 42);
+
+ const AllocT& a2 = v2.get_allocator();
+ assert(a2.get_id() == 101);
+ assert(a2.get_data() == 42);
+
+ assert(a1 == a2);
}
}
}
diff --git a/libcxx/test/std/containers/sequences/deque/deque.cons/move.pass.cpp b/libcxx/test/std/containers/sequences/deque/deque.cons/move.pass.cpp
index 067b8eb1667bc5..daed255a5f3a75 100644
--- a/libcxx/test/std/containers/sequences/deque/deque.cons/move.pass.cpp
+++ b/libcxx/test/std/containers/sequences/deque/deque.cons/move.pass.cpp
@@ -38,7 +38,7 @@ int main(int, char**)
assert(c2 == c3);
assert(c1.size() == 0);
assert(c3.get_allocator() == old_a);
- assert(c1.get_allocator() == A(test_alloc_base::moved_value));
+ assert(c1.get_allocator() == A(1));
LIBCPP_ASSERT(is_double_ended_contiguous_container_asan_correct(c1));
LIBCPP_ASSERT(is_double_ended_contiguous_container_asan_correct(c2));
LIBCPP_ASSERT(is_double_ended_contiguous_container_asan_correct(c3));
diff --git a/libcxx/test/std/containers/sequences/vector.bool/move.pass.cpp b/libcxx/test/std/containers/sequences/vector.bool/move.pass.cpp
index 0e65d9896f4020..0f0107ed0809f6 100644
--- a/libcxx/test/std/containers/sequences/vector.bool/move.pass.cpp
+++ b/libcxx/test/std/containers/sequences/vector.bool/move.pass.cpp
@@ -80,14 +80,15 @@ TEST_CONSTEXPR_CXX20 bool tests()
assert(alloc_stats.copied == 0);
assert(alloc_stats.moved == 1);
{
- const AllocT& a = v.get_allocator();
- assert(a.get_id() == test_alloc_base::moved_value);
- assert(a.get_data() == test_alloc_base::moved_value);
- }
- {
- const AllocT& a = v2.get_allocator();
- assert(a.get_id() == 101);
- assert(a.get_data() == 42);
+ const AllocT& a1 = v.get_allocator();
+ assert(a1.get_id() == test_alloc_base::moved_value);
+ assert(a2.get_data() == 42);
+
+ const AllocT& a2 = v2.get_allocator();
+ assert(a2.get_id() == 101);
+ assert(a2.get_data() == 42);
+
+ assert(a1 == a2);
}
}
diff --git a/libcxx/test/std/containers/sequences/vector/vector.cons/move.pass.cpp b/libcxx/test/std/containers/sequences/vector/vector.cons/move.pass.cpp
index 95b896b41f530f..c8b8701cc491b7 100644
--- a/libcxx/test/std/containers/sequences/vector/vector.cons/move.pass.cpp
+++ b/libcxx/test/std/containers/sequences/vector/vector.cons/move.pass.cpp
@@ -148,14 +148,15 @@ TEST_CONSTEXPR_CXX20 bool tests()
assert(alloc_stats.copied == 0);
assert(alloc_stats.moved == 1);
{
- const test_allocator<int>& a = v.get_allocator();
- assert(a.get_id() == test_alloc_base::moved_value);
- assert(a.get_data() == test_alloc_base::moved_value);
- }
- {
- const test_allocator<int>& a = v2.get_allocator();
- assert(a.get_id() == 101);
- assert(a.get_data() == 42);
+ const test_allocator<int>& a1 = v.get_allocator();
+ assert(a1.get_id() == test_alloc_base::moved_value);
+ assert(a1.get_data() == 42);
+
+ const test_allocator<int>& a2 = v2.get_allocator();
+ assert(a2.get_id() == 101);
+ assert(a2.get_data() == 42);
+
+ assert(a1 == a2);
}
}
diff --git a/libcxx/test/support/test_allocator.h b/libcxx/test/support/test_allocator.h
index 8ae04413f8a93c..dcd15332ca304f 100644
--- a/libcxx/test/support/test_allocator.h
+++ b/libcxx/test/support/test_allocator.h
@@ -125,7 +125,6 @@ class test_allocator {
}
assert(a.data_ != test_alloc_base::destructed_value && a.id_ != test_alloc_base::destructed_value &&
"moving from destroyed allocator");
- a.data_ = test_alloc_base::moved_value;
a.id_ = test_alloc_base::moved_value;
}
More information about the libcxx-commits
mailing list