[libcxx-commits] [libcxx] [libc++][ranges] Add sentinel `OtherConst` cases for `[[nodiscard]]` tests in `enumerate_view` (PR #209289)

Hristo Hristov via libcxx-commits libcxx-commits at lists.llvm.org
Fri Jul 17 09:53:03 PDT 2026


https://github.com/Zingam 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/8] 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/8] 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/8] 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/8] 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/8] 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 6/8] 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 7/8] 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 8/8] 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}}



More information about the libcxx-commits mailing list