[libcxx-commits] [libcxx] [libc++] Mini-cleanup for `[[nodiscard]]` (PR #172275)
A. Jiang via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Dec 15 02:35:42 PST 2025
https://github.com/frederick-vs-ja created https://github.com/llvm/llvm-project/pull/172275
1. Remove incorrect `[[nodiscard]]` from compound assignment operators in `<__filesystem/copy_options.h>`.
2. Add missing `[[nodiscard]]` mark for `mdspan::size` in `<__mdspan/mdspan.h>` and test it.
3. Enable verifying `[[nodiscard]]` in C++03 for various components. These components are either present in C++03 or backported by libc++ from C++11.
>From 8cc343b5724244a499406baee53f727f74487a64 Mon Sep 17 00:00:00 2001
From: "A. Jiang" <de34 at live.cn>
Date: Mon, 15 Dec 2025 18:21:20 +0800
Subject: [PATCH 1/3] Remove incorrect `[[nodiscard]]` from compound assignment
operators
---
libcxx/include/__filesystem/copy_options.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/libcxx/include/__filesystem/copy_options.h b/libcxx/include/__filesystem/copy_options.h
index cba719dbed1f6..d9039a6492fc2 100644
--- a/libcxx/include/__filesystem/copy_options.h
+++ b/libcxx/include/__filesystem/copy_options.h
@@ -50,15 +50,15 @@ enum class copy_options : unsigned short {
return static_cast<copy_options>(~static_cast<unsigned short>(__lhs));
}
-[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline copy_options& operator&=(copy_options& __lhs, copy_options __rhs) {
+_LIBCPP_HIDE_FROM_ABI inline copy_options& operator&=(copy_options& __lhs, copy_options __rhs) {
return __lhs = __lhs & __rhs;
}
-[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline copy_options& operator|=(copy_options& __lhs, copy_options __rhs) {
+_LIBCPP_HIDE_FROM_ABI inline copy_options& operator|=(copy_options& __lhs, copy_options __rhs) {
return __lhs = __lhs | __rhs;
}
-[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline copy_options& operator^=(copy_options& __lhs, copy_options __rhs) {
+_LIBCPP_HIDE_FROM_ABI inline copy_options& operator^=(copy_options& __lhs, copy_options __rhs) {
return __lhs = __lhs ^ __rhs;
}
>From 9cf48f85b32ee71b11bdea66a070dc30869dea6b Mon Sep 17 00:00:00 2001
From: "A. Jiang" <de34 at live.cn>
Date: Mon, 15 Dec 2025 18:21:54 +0800
Subject: [PATCH 2/3] Add missing `[[nodiscard]]` to `mdspan::size`
---
libcxx/include/__mdspan/mdspan.h | 2 +-
libcxx/test/libcxx/containers/views/mdspan/nodiscard.verify.cpp | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/libcxx/include/__mdspan/mdspan.h b/libcxx/include/__mdspan/mdspan.h
index 9f3139a874ff9..9d3d35cd558a1 100644
--- a/libcxx/include/__mdspan/mdspan.h
+++ b/libcxx/include/__mdspan/mdspan.h
@@ -214,7 +214,7 @@ class mdspan {
}(make_index_sequence<rank()>()));
}
- _LIBCPP_HIDE_FROM_ABI constexpr size_type size() const noexcept {
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr size_type size() const noexcept {
// Could leave this as only checked in debug mode: semantically size() is never
// guaranteed to be related to any accessible range
_LIBCPP_ASSERT_UNCATEGORIZED(
diff --git a/libcxx/test/libcxx/containers/views/mdspan/nodiscard.verify.cpp b/libcxx/test/libcxx/containers/views/mdspan/nodiscard.verify.cpp
index 71f53f8f1f737..d248656ec0ae5 100644
--- a/libcxx/test/libcxx/containers/views/mdspan/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/containers/views/mdspan/nodiscard.verify.cpp
@@ -33,6 +33,8 @@ void test() {
mdsp.static_extent(0); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
mdsp.extent(0); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+ mdsp.size(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
mdsp.extents(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
mdsp.data_handle(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
mdsp.mapping(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
>From cd8403abc8d0370f14664be661132f54f0b9b5e7 Mon Sep 17 00:00:00 2001
From: "A. Jiang" <de34 at live.cn>
Date: Mon, 15 Dec 2025 18:30:50 +0800
Subject: [PATCH 3/3] Enable verifying `[[nodiscard]]` in C++03 for various
components
libc++ backports many things from C++11 to C++03, so it would be
suitable to verify `[[nodiscard]]` in C++03 mode for them.
Some test files are skipped because they're being touch by other
patches.
---
libcxx/test/libcxx/diagnostics/algorithm.nodiscard.verify.cpp | 2 --
libcxx/test/libcxx/diagnostics/array.nodiscard.verify.cpp | 2 --
libcxx/test/libcxx/diagnostics/cstdlib.nodiscard.verify.cpp | 2 --
libcxx/test/libcxx/diagnostics/deque.nodiscard.verify.cpp | 2 --
.../test/libcxx/diagnostics/forward_list.nodiscard.verify.cpp | 2 --
.../test/libcxx/diagnostics/functional.nodiscard.verify.cpp | 4 +---
libcxx/test/libcxx/diagnostics/future.nodiscard.verify.cpp | 2 --
libcxx/test/libcxx/diagnostics/limits.nodiscard.verify.cpp | 2 --
libcxx/test/libcxx/diagnostics/list.nodiscard.verify.cpp | 2 --
libcxx/test/libcxx/diagnostics/mutex.nodiscard.verify.cpp | 2 --
libcxx/test/libcxx/diagnostics/new.nodiscard.verify.cpp | 2 --
libcxx/test/libcxx/diagnostics/queue.nodiscard.verify.cpp | 2 --
libcxx/test/libcxx/diagnostics/stack.nodiscard.verify.cpp | 2 --
libcxx/test/libcxx/diagnostics/string.nodiscard.verify.cpp | 2 --
.../test/libcxx/diagnostics/string_view.nodiscard.verify.cpp | 2 --
libcxx/test/libcxx/diagnostics/utility.nodiscard.verify.cpp | 2 --
libcxx/test/libcxx/diagnostics/vector.nodiscard.verify.cpp | 2 --
libcxx/test/libcxx/thread/nodiscard.verify.cpp | 1 -
libcxx/test/libcxx/utilities/smartptr/nodiscard.verify.cpp | 2 --
19 files changed, 1 insertion(+), 38 deletions(-)
diff --git a/libcxx/test/libcxx/diagnostics/algorithm.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/algorithm.nodiscard.verify.cpp
index 14febc12a8a2d..85d33e240a33e 100644
--- a/libcxx/test/libcxx/diagnostics/algorithm.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/algorithm.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// check that <algorithm> functions are marked [[nodiscard]]
// clang-format off
diff --git a/libcxx/test/libcxx/diagnostics/array.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/array.nodiscard.verify.cpp
index 8e49807732de7..9797cf70b244d 100644
--- a/libcxx/test/libcxx/diagnostics/array.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/array.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// check that <array> functions are marked [[nodiscard]]
#include <array>
diff --git a/libcxx/test/libcxx/diagnostics/cstdlib.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/cstdlib.nodiscard.verify.cpp
index d3c809f22816b..52e897662fef6 100644
--- a/libcxx/test/libcxx/diagnostics/cstdlib.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/cstdlib.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// We don't control the implementation of the stdlib.h functions on windows
// UNSUPPORTED: windows
diff --git a/libcxx/test/libcxx/diagnostics/deque.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/deque.nodiscard.verify.cpp
index a9adb1757b8ef..c10a99afee8fa 100644
--- a/libcxx/test/libcxx/diagnostics/deque.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/deque.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// check that <deque> functions are marked [[nodiscard]]
#include <deque>
diff --git a/libcxx/test/libcxx/diagnostics/forward_list.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/forward_list.nodiscard.verify.cpp
index 671c7f71ab2a2..596dc52cdd7aa 100644
--- a/libcxx/test/libcxx/diagnostics/forward_list.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/forward_list.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// check that <forward_list> functions are marked [[nodiscard]]
#include <forward_list>
diff --git a/libcxx/test/libcxx/diagnostics/functional.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/functional.nodiscard.verify.cpp
index 521870f2484a2..f76641adc016c 100644
--- a/libcxx/test/libcxx/diagnostics/functional.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/functional.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// check that <functional> functions are marked [[nodiscard]]
#include <cstddef>
@@ -20,7 +18,7 @@ void test() {
// Function wrappers
-#if !defined(TEST_HAS_NO_RTTI)
+#if TEST_STD_VER >= 11 && !defined(TEST_HAS_NO_RTTI)
std::function<void(int)> f;
const std::function<void(int)> cf;
diff --git a/libcxx/test/libcxx/diagnostics/future.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/future.nodiscard.verify.cpp
index cc5c6135d109b..63f395da36c4d 100644
--- a/libcxx/test/libcxx/diagnostics/future.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/future.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// UNSUPPORTED: no-threads
// check that <future> functions are marked [[nodiscard]]
diff --git a/libcxx/test/libcxx/diagnostics/limits.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/limits.nodiscard.verify.cpp
index 7a81b84378c52..d3bea9ea031f4 100644
--- a/libcxx/test/libcxx/diagnostics/limits.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/limits.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// check that <limits> functions are marked [[nodiscard]]
#include <limits>
diff --git a/libcxx/test/libcxx/diagnostics/list.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/list.nodiscard.verify.cpp
index bfce9b85ef76c..cff607e738d35 100644
--- a/libcxx/test/libcxx/diagnostics/list.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/list.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// check that <list> functions are marked [[nodiscard]]
#include <list>
diff --git a/libcxx/test/libcxx/diagnostics/mutex.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/mutex.nodiscard.verify.cpp
index b9890ced55bb1..e34766828c3fe 100644
--- a/libcxx/test/libcxx/diagnostics/mutex.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/mutex.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// UNSUPPORTED: no-threads
// check that <mutex> functions are marked [[nodiscard]]
diff --git a/libcxx/test/libcxx/diagnostics/new.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/new.nodiscard.verify.cpp
index 505618c0b88d7..b2af8d4a74027 100644
--- a/libcxx/test/libcxx/diagnostics/new.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/new.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// check that <array> functions are marked [[nodiscard]]
// clang-format off
diff --git a/libcxx/test/libcxx/diagnostics/queue.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/queue.nodiscard.verify.cpp
index da1f9ff3f01f6..b16a7480cc540 100644
--- a/libcxx/test/libcxx/diagnostics/queue.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/queue.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// check that <queue> functions are marked [[nodiscard]]
#include <queue>
diff --git a/libcxx/test/libcxx/diagnostics/stack.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/stack.nodiscard.verify.cpp
index a0a5b3c898a8c..d176fd4cf6f68 100644
--- a/libcxx/test/libcxx/diagnostics/stack.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/stack.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// check that <stack> functions are marked [[nodiscard]]
#include <stack>
diff --git a/libcxx/test/libcxx/diagnostics/string.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/string.nodiscard.verify.cpp
index 0ff92cac3a3b2..3a941598e6e68 100644
--- a/libcxx/test/libcxx/diagnostics/string.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/string.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// check that <string> functions are marked [[nodiscard]]
#include <string>
diff --git a/libcxx/test/libcxx/diagnostics/string_view.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/string_view.nodiscard.verify.cpp
index 89e4a5b44ab48..5620e71a56c62 100644
--- a/libcxx/test/libcxx/diagnostics/string_view.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/string_view.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// check that <string_view> functions are marked [[nodiscard]]
#include <string_view>
diff --git a/libcxx/test/libcxx/diagnostics/utility.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/utility.nodiscard.verify.cpp
index 2f5b3ba0fc642..3d6ff423dc917 100644
--- a/libcxx/test/libcxx/diagnostics/utility.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/utility.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// check that <utility> functions are marked [[nodiscard]]
#include <utility>
diff --git a/libcxx/test/libcxx/diagnostics/vector.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/vector.nodiscard.verify.cpp
index a5cad1a1627e6..3a443a367a77b 100644
--- a/libcxx/test/libcxx/diagnostics/vector.nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/vector.nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// check that <vector> functions are marked [[nodiscard]]
#include <type_traits>
diff --git a/libcxx/test/libcxx/thread/nodiscard.verify.cpp b/libcxx/test/libcxx/thread/nodiscard.verify.cpp
index 19e43f88db700..5cdf2a43037da 100644
--- a/libcxx/test/libcxx/thread/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/thread/nodiscard.verify.cpp
@@ -6,7 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
// UNSUPPORTED: no-threads
// Check that functions are marked [[nodiscard]]
diff --git a/libcxx/test/libcxx/utilities/smartptr/nodiscard.verify.cpp b/libcxx/test/libcxx/utilities/smartptr/nodiscard.verify.cpp
index 6e713fe5217ba..42a11ea3ef9df 100644
--- a/libcxx/test/libcxx/utilities/smartptr/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/utilities/smartptr/nodiscard.verify.cpp
@@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03
-
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_CXX20_REMOVED_SHARED_PTR_UNIQUE -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS
// <memory>
More information about the libcxx-commits
mailing list