[libcxx-commits] [libcxx] [libc++] Mini-cleanup for `[[nodiscard]]` (PR #172275)
via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Dec 15 02:36:17 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libcxx
Author: A. Jiang (frederick-vs-ja)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/172275.diff
22 Files Affected:
- (modified) libcxx/include/__filesystem/copy_options.h (+3-3)
- (modified) libcxx/include/__mdspan/mdspan.h (+1-1)
- (modified) libcxx/test/libcxx/containers/views/mdspan/nodiscard.verify.cpp (+2)
- (modified) libcxx/test/libcxx/diagnostics/algorithm.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/diagnostics/array.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/diagnostics/cstdlib.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/diagnostics/deque.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/diagnostics/forward_list.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/diagnostics/functional.nodiscard.verify.cpp (+1-3)
- (modified) libcxx/test/libcxx/diagnostics/future.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/diagnostics/limits.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/diagnostics/list.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/diagnostics/mutex.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/diagnostics/new.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/diagnostics/queue.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/diagnostics/stack.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/diagnostics/string.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/diagnostics/string_view.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/diagnostics/utility.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/diagnostics/vector.nodiscard.verify.cpp (-2)
- (modified) libcxx/test/libcxx/thread/nodiscard.verify.cpp (-1)
- (modified) libcxx/test/libcxx/utilities/smartptr/nodiscard.verify.cpp (-2)
``````````diff
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;
}
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}}
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>
``````````
</details>
https://github.com/llvm/llvm-project/pull/172275
More information about the libcxx-commits
mailing list