[libcxx-commits] [libcxx] [libc++][ranges] Add missing test cases for `[[nodiscard]]` tests in `enumerate_view` (PR #209289)
Lucas Mellone via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Jul 17 12:48:52 PDT 2026
https://github.com/lknknm updated https://github.com/llvm/llvm-project/pull/209289
>From de6bef4e4ef9069b23edba3c557e7d576fc78e4a Mon Sep 17 00:00:00 2001
From: Lucas Mellone <github.snugness349 at passinbox.com>
Date: Sun, 12 Jul 2026 18:32:39 +0200
Subject: [PATCH 01/11] add: OtherConst test to sentinel operator-
---
.../range.enumerate/nodiscard.verify.cpp | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
index 06b0d6a8c148b..d6d93219a4e14 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
@@ -64,7 +64,8 @@ void test() {
// [range.enumerate.sentinel]
- auto st = ev.end();
+ auto st = ev.end();
+ auto c_it = std::as_const(ev).begin();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
std::as_const(st).base();
@@ -74,8 +75,13 @@ void test() {
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
st - it;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ st - c_it;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ c_it - st;
+
// [range.enumerate.overview]
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
std::views::enumerate(range);
-}
\ No newline at end of file
+}
>From bcb2d6392e68580206412414a24029dee3c70881 Mon Sep 17 00:00:00 2001
From: Lucas Mellone <github.snugness349 at passinbox.com>
Date: Mon, 13 Jul 2026 23:20:42 +0200
Subject: [PATCH 02/11] ref: model non-common non-simple view for sentinel
tests and general adjustments
---
.../range.enumerate/nodiscard.verify.cpp | 38 ++++++++++++-------
1 file changed, 25 insertions(+), 13 deletions(-)
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
index d6d93219a4e14..fea1bca7c2145 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
@@ -14,32 +14,41 @@
#include <utility>
#include <vector>
+struct View : std::ranges::view_interface<View> {
+ int* begin();
+ const int* begin() const;
+ volatile int* end();
+ const volatile int* end() const;
+};
+static_assert(!std::ranges::common_range<View>);
+static_assert(!std::same_as<std::ranges::iterator_t<View>, std::ranges::iterator_t<const View>>);
+static_assert(!std::same_as<std::ranges::sentinel_t<View>, std::ranges::sentinel_t<const View>>);
+
void test() {
- std::vector<int> range;
- std::ranges::enumerate_view ev{range};
+ auto v = View{} | std::views::enumerate;
// [range.enumerate.view]
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- ev.begin();
+ v.begin();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::as_const(ev).begin();
+ std::as_const(v).begin();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- ev.end();
+ v.end();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::as_const(ev).end();
+ std::as_const(v).end();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- ev.size();
+ v.size();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::as_const(ev).size();
+ std::as_const(v).size();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- ev.base();
+ v.base();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::move(ev).base();
+ std::move(v).base();
// [range.enumerate.iterator]
- auto it = ev.begin();
+ auto it = v.begin();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
std::as_const(it).base();
@@ -64,8 +73,7 @@ void test() {
// [range.enumerate.sentinel]
- auto st = ev.end();
- auto c_it = std::as_const(ev).begin();
+ auto st = v.end();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
std::as_const(st).base();
@@ -75,6 +83,8 @@ void test() {
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
st - it;
+ auto c_it = std::as_const(v).begin();
+
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
st - c_it;
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
@@ -82,6 +92,8 @@ void test() {
// [range.enumerate.overview]
+ std::vector<int> range { 1, 2, 3 };
+
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
std::views::enumerate(range);
}
>From 02096b8044eb8b37db4a9cdee0c35da7d297574c Mon Sep 17 00:00:00 2001
From: Lucas Mellone <github.snugness349 at passinbox.com>
Date: Mon, 13 Jul 2026 23:25:17 +0200
Subject: [PATCH 03/11] fix: clang-format
---
.../range.adaptors/range.enumerate/nodiscard.verify.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
index fea1bca7c2145..4ebb6196c8d9c 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
@@ -25,7 +25,7 @@ static_assert(!std::same_as<std::ranges::iterator_t<View>, std::ranges::iterator
static_assert(!std::same_as<std::ranges::sentinel_t<View>, std::ranges::sentinel_t<const View>>);
void test() {
- auto v = View{} | std::views::enumerate;
+ auto v = View{} | std::views::enumerate;
// [range.enumerate.view]
@@ -92,7 +92,7 @@ void test() {
// [range.enumerate.overview]
- std::vector<int> range { 1, 2, 3 };
+ std::vector<int> range{1, 2, 3};
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
std::views::enumerate(range);
>From 9fda31d2eb80d645f56214599f544ebccb8b724a Mon Sep 17 00:00:00 2001
From: Lucas Mellone <github.snugness349 at passinbox.com>
Date: Tue, 14 Jul 2026 11:09:56 +0200
Subject: [PATCH 04/11] Update
libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
Co-authored-by: Hristo Hristov <zingam at outlook.com>
---
.../ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
index 4ebb6196c8d9c..b2ce7f3418fe6 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
@@ -25,7 +25,8 @@ static_assert(!std::same_as<std::ranges::iterator_t<View>, std::ranges::iterator
static_assert(!std::same_as<std::ranges::sentinel_t<View>, std::ranges::sentinel_t<const View>>);
void test() {
- auto v = View{} | std::views::enumerate;
+ View range;
+ auto v = std::ranges::enumerate_view ev{range};
// [range.enumerate.view]
>From 02235acb82379ce5c0bf8011275e5129effbf3ad Mon Sep 17 00:00:00 2001
From: Lucas Mellone <github.snugness349 at passinbox.com>
Date: Tue, 14 Jul 2026 11:11:36 +0200
Subject: [PATCH 05/11] rename range variable to vec
---
.../range.adaptors/range.enumerate/nodiscard.verify.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
index b2ce7f3418fe6..250b21e3e9910 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
@@ -93,8 +93,8 @@ void test() {
// [range.enumerate.overview]
- std::vector<int> range{1, 2, 3};
+ std::vector<int> vec{1, 2, 3};
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::views::enumerate(range);
+ std::views::enumerate(vec);
}
>From 4ed811e010d332be499f091c05e411f3f88349a0 Mon Sep 17 00:00:00 2001
From: Lucas Mellone <github.snugness349 at passinbox.com>
Date: Tue, 14 Jul 2026 11:16:13 +0200
Subject: [PATCH 06/11] fix: wrong variable initialization
---
.../range.adaptors/range.enumerate/nodiscard.verify.cpp | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
index 250b21e3e9910..c10e56293246f 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
@@ -12,7 +12,6 @@
#include <ranges>
#include <utility>
-#include <vector>
struct View : std::ranges::view_interface<View> {
int* begin();
@@ -26,7 +25,7 @@ static_assert(!std::same_as<std::ranges::sentinel_t<View>, std::ranges::sentinel
void test() {
View range;
- auto v = std::ranges::enumerate_view ev{range};
+ std::ranges::enumerate_view v{range};
// [range.enumerate.view]
@@ -93,8 +92,6 @@ void test() {
// [range.enumerate.overview]
- std::vector<int> vec{1, 2, 3};
-
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::views::enumerate(vec);
+ std::views::enumerate(range);
}
>From 214a924d09e6d0d60b8531e2da1422e69c90eae1 Mon Sep 17 00:00:00 2001
From: Lucas Mellone <github.snugness349 at passinbox.com>
Date: Tue, 14 Jul 2026 15:20:49 +0200
Subject: [PATCH 07/11] remove: c_it - st and st - c_st tests. Add
static_asserts
---
.../range.adaptors/range.enumerate/nodiscard.verify.cpp | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
index c10e56293246f..4f99f0842dd11 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
@@ -22,6 +22,8 @@ struct View : std::ranges::view_interface<View> {
static_assert(!std::ranges::common_range<View>);
static_assert(!std::same_as<std::ranges::iterator_t<View>, std::ranges::iterator_t<const View>>);
static_assert(!std::same_as<std::ranges::sentinel_t<View>, std::ranges::sentinel_t<const View>>);
+static_assert(std::ranges::sized_range<View>);
+static_assert(std::ranges::forward_range<View>);
void test() {
View range;
@@ -83,13 +85,6 @@ void test() {
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
st - it;
- auto c_it = std::as_const(v).begin();
-
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- st - c_it;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- c_it - st;
-
// [range.enumerate.overview]
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
>From e28782a46f3d2c7d612a978652f59dd325655423 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <zingam at outlook.com>
Date: Fri, 17 Jul 2026 19:52:52 +0300
Subject: [PATCH 08/11] Apply suggestion from @Zingam
---
.../range.adaptors/range.enumerate/nodiscard.verify.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
index 4f99f0842dd11..16b2340b8357d 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
@@ -64,7 +64,10 @@ void test() {
std::as_const(it)[2];
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- it + 1;
+// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+it + 1;
+// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+1 + it;
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
it - 1;
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
>From a2b5b74e069d1b7c24e1419410550c01dc32ce92 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <zingam at outlook.com>
Date: Fri, 17 Jul 2026 19:53:35 +0300
Subject: [PATCH 09/11] Apply suggestion from @Zingam
---
.../range.adaptors/range.enumerate/nodiscard.verify.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
index 16b2340b8357d..18cd3b4247fba 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
@@ -64,10 +64,10 @@ void test() {
std::as_const(it)[2];
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
-// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
-it + 1;
-// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
-1 + it;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ it + 1;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 1 + it;
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
it - 1;
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
>From 8902bfa9d6b98e5f7715e4d9639bc96ed16814aa Mon Sep 17 00:00:00 2001
From: Hristo Hristov <zingam at outlook.com>
Date: Fri, 17 Jul 2026 19:56:24 +0300
Subject: [PATCH 10/11] Apply suggestion from @Zingam
---
.../ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp | 1 -
1 file changed, 1 deletion(-)
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
index 18cd3b4247fba..19b9731cd2b69 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
@@ -63,7 +63,6 @@ void test() {
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
std::as_const(it)[2];
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
it + 1;
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
>From 721703d06ebb83f04470e2852519d7f73cc050f2 Mon Sep 17 00:00:00 2001
From: Lucas Mellone <github.snugness349 at passinbox.com>
Date: Fri, 17 Jul 2026 21:48:32 +0200
Subject: [PATCH 11/11] revert: v back to ev
---
.../range.enumerate/nodiscard.verify.cpp | 23 ++++++++++---------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
index 19b9731cd2b69..80021e61067ee 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.enumerate/nodiscard.verify.cpp
@@ -27,30 +27,30 @@ static_assert(std::ranges::forward_range<View>);
void test() {
View range;
- std::ranges::enumerate_view v{range};
+ std::ranges::enumerate_view ev{range};
// [range.enumerate.view]
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- v.begin();
+ ev.begin();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::as_const(v).begin();
+ std::as_const(ev).begin();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- v.end();
+ ev.end();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::as_const(v).end();
+ std::as_const(ev).end();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- v.size();
+ ev.size();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::as_const(v).size();
+ std::as_const(ev).size();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- v.base();
+ ev.base();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::move(v).base();
+ std::move(ev).base();
// [range.enumerate.iterator]
- auto it = v.begin();
+ auto it = ev.begin();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
std::as_const(it).base();
@@ -77,7 +77,7 @@ void test() {
// [range.enumerate.sentinel]
- auto st = v.end();
+ auto st = ev.end();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
std::as_const(st).base();
@@ -92,3 +92,4 @@ void test() {
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
std::views::enumerate(range);
}
+
More information about the libcxx-commits
mailing list