[libcxx-commits] [libcxx] [libc++] Add sentinel OtherConst cases for `nodiscard` tests in `enumerate_view` (PR #209289)
Lucas Mellone via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Jul 14 02:10:06 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 1/4] 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 2/4] 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 3/4] 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 4/4] 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]
More information about the libcxx-commits
mailing list