[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:11:50 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/5] 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/5] 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/5] 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/5] 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 5/5] 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);
 }



More information about the libcxx-commits mailing list