[libcxx-commits] [libcxx] [libc++][test] Make `EvilContainer` a sequence container (PR #178626)
via libcxx-commits
libcxx-commits at lists.llvm.org
Thu Jan 29 02:31:26 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libcxx
Author: A. Jiang (frederick-vs-ja)
<details>
<summary>Changes</summary>
In tests for flat container adaptors, the `EvilContainer` type doesn't have sufficient constructors to meet the requirements for sequence containers ([sequence.reqmts]). Also, assignment from an `initializer_list` doesn't have correct return type.
This patch makes `EvilContainer` inherit constructors from `vector<int>` and add a correct assignment operator from `initializer_list<int>`.
Fixes #<!-- -->178624.
---
Full diff: https://github.com/llvm/llvm-project/pull/178626.diff
4 Files Affected:
- (modified) libcxx/test/std/containers/container.adaptors/flat.map/flat.map.cons/move_exceptions.pass.cpp (+7)
- (modified) libcxx/test/std/containers/container.adaptors/flat.multimap/flat.multimap.cons/move_exceptions.pass.cpp (+7)
- (modified) libcxx/test/std/containers/container.adaptors/flat.multiset/flat.multiset.cons/move.pass.cpp (+7)
- (modified) libcxx/test/std/containers/container.adaptors/flat.set/flat.set.cons/move.pass.cpp (+7)
``````````diff
diff --git a/libcxx/test/std/containers/container.adaptors/flat.map/flat.map.cons/move_exceptions.pass.cpp b/libcxx/test/std/containers/container.adaptors/flat.map/flat.map.cons/move_exceptions.pass.cpp
index cb7e30c2b74fa..e56cb12d9a113 100644
--- a/libcxx/test/std/containers/container.adaptors/flat.map/flat.map.cons/move_exceptions.pass.cpp
+++ b/libcxx/test/std/containers/container.adaptors/flat.map/flat.map.cons/move_exceptions.pass.cpp
@@ -27,6 +27,8 @@
static int countdown = 0;
struct EvilContainer : std::vector<int> {
+ using std::vector<int>::vector;
+
EvilContainer() = default;
EvilContainer(EvilContainer&& rhs) {
// Throw on move-construction.
@@ -36,6 +38,11 @@ struct EvilContainer : std::vector<int> {
throw 42;
}
}
+
+ EvilContainer& operator=(std::initializer_list<int> il) {
+ std::vector<int>::operator=(il);
+ return *this;
+ }
};
int main(int, char**) {
diff --git a/libcxx/test/std/containers/container.adaptors/flat.multimap/flat.multimap.cons/move_exceptions.pass.cpp b/libcxx/test/std/containers/container.adaptors/flat.multimap/flat.multimap.cons/move_exceptions.pass.cpp
index c2085e32be532..44b6e93114c78 100644
--- a/libcxx/test/std/containers/container.adaptors/flat.multimap/flat.multimap.cons/move_exceptions.pass.cpp
+++ b/libcxx/test/std/containers/container.adaptors/flat.multimap/flat.multimap.cons/move_exceptions.pass.cpp
@@ -27,6 +27,8 @@
static int countdown = 0;
struct EvilContainer : std::vector<int> {
+ using std::vector<int>::vector;
+
EvilContainer() = default;
EvilContainer(EvilContainer&& rhs) {
// Throw on move-construction.
@@ -36,6 +38,11 @@ struct EvilContainer : std::vector<int> {
throw 42;
}
}
+
+ EvilContainer& operator=(std::initializer_list<int> il) {
+ std::vector<int>::operator=(il);
+ return *this;
+ }
};
int main(int, char**) {
diff --git a/libcxx/test/std/containers/container.adaptors/flat.multiset/flat.multiset.cons/move.pass.cpp b/libcxx/test/std/containers/container.adaptors/flat.multiset/flat.multiset.cons/move.pass.cpp
index 064baa98d2b51..f9fea737254d3 100644
--- a/libcxx/test/std/containers/container.adaptors/flat.multiset/flat.multiset.cons/move.pass.cpp
+++ b/libcxx/test/std/containers/container.adaptors/flat.multiset/flat.multiset.cons/move.pass.cpp
@@ -159,6 +159,8 @@ void test_move_noexcept() {
static int countdown = 0;
struct EvilContainer : std::vector<int> {
+ using std::vector<int>::vector;
+
EvilContainer() = default;
EvilContainer(EvilContainer&& rhs) {
// Throw on move-construction.
@@ -168,6 +170,11 @@ struct EvilContainer : std::vector<int> {
throw 42;
}
}
+
+ EvilContainer& operator=(std::initializer_list<int> il) {
+ std::vector<int>::operator=(il);
+ return *this;
+ }
};
void test_move_exception() {
diff --git a/libcxx/test/std/containers/container.adaptors/flat.set/flat.set.cons/move.pass.cpp b/libcxx/test/std/containers/container.adaptors/flat.set/flat.set.cons/move.pass.cpp
index b737a5fba056d..1d7a3589cc109 100644
--- a/libcxx/test/std/containers/container.adaptors/flat.set/flat.set.cons/move.pass.cpp
+++ b/libcxx/test/std/containers/container.adaptors/flat.set/flat.set.cons/move.pass.cpp
@@ -150,6 +150,8 @@ constexpr bool test() {
static int countdown = 0;
struct EvilContainer : std::vector<int> {
+ using std::vector<int>::vector;
+
EvilContainer() = default;
EvilContainer(EvilContainer&& rhs) {
// Throw on move-construction.
@@ -159,6 +161,11 @@ struct EvilContainer : std::vector<int> {
throw 42;
}
}
+
+ EvilContainer& operator=(std::initializer_list<int> il) {
+ std::vector<int>::operator=(il);
+ return *this;
+ }
};
void test_move_exception() {
``````````
</details>
https://github.com/llvm/llvm-project/pull/178626
More information about the libcxx-commits
mailing list