[libcxx-commits] [libcxx] [libc++][NFC] Refactor `[[nodiscard]]` tests (PR #173451)
via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Dec 23 21:33:17 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libcxx
Author: Hristo Hristov (H-G-Hristov)
<details>
<summary>Changes</summary>
Originally some `[[nodiscard]]` tests were implemented in `*/test/libcxx/diagnostics`. The Standard has a library `Diagnostics` and this folder should be reserved for it by convention. Many new tetss were added to their respective subfolders. This patch moves around the already implemented `[[nodiscard]]` tests to their respective folders where they belong and standardizes the name to `nodiscard.verify.cpp` whereever possible.
N.B. This refactors only tests, which were merged. The remaining will be moved in a future patch to reduce merge conflicts on their own.
---
Patch is 22.04 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/173451.diff
34 Files Affected:
- (renamed) libcxx/test/libcxx/algorithms/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/atomics/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/associative/map/map.nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/associative/map/multimap.nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/associative/set/multiset.nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/associative/set/set.nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/container.adaptors/flat.map/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/container.adaptors/flat.multimap/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/container.adaptors/flat.multiset/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/container.adaptors/flat.set/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/container.adaptors/queue/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/container.adaptors/stack/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/sequences/array/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/sequences/deque/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/sequences/forwardlist/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/sequences/list/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/sequences/vector/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/unord/unord.map/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/unord/unord.multimap/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/unord/unord.multiset/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/containers/unord/unord.set/nodiscard.verify.cpp ()
- (removed) libcxx/test/libcxx/diagnostics/mutex.nodiscard.verify.cpp (-67)
- (removed) libcxx/test/libcxx/diagnostics/new.nodiscard.verify.cpp (-57)
- (renamed) libcxx/test/libcxx/diagnostics/syserr/system_error_win_codes.pass.cpp ()
- (renamed) libcxx/test/libcxx/input.output/filesystems/nodiscard.verify.cpp ()
- (modified) libcxx/test/libcxx/language.support/nodiscard.verify.cpp (+41)
- (renamed) libcxx/test/libcxx/re/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/strings/basic.string/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/strings/string.view/nodiscard.verify.cpp ()
- (modified) libcxx/test/libcxx/thread/nodiscard.verify.cpp (+48)
- (renamed) libcxx/test/libcxx/time/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/utilities/format/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/utilities/function.objects/nodiscard.verify.cpp ()
- (renamed) libcxx/test/libcxx/utilities/utility/nodiscard.verify.cpp ()
``````````diff
diff --git a/libcxx/test/libcxx/diagnostics/algorithm.nodiscard.verify.cpp b/libcxx/test/libcxx/algorithms/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/algorithm.nodiscard.verify.cpp
rename to libcxx/test/libcxx/algorithms/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/atomic.nodiscard.verify.cpp b/libcxx/test/libcxx/atomics/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/atomic.nodiscard.verify.cpp
rename to libcxx/test/libcxx/atomics/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/map.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/associative/map/map.nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/map.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/associative/map/map.nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/multimap.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/associative/map/multimap.nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/multimap.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/associative/map/multimap.nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/multiset.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/associative/set/multiset.nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/multiset.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/associative/set/multiset.nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/set.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/associative/set/set.nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/set.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/associative/set/set.nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/flat_map.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/container.adaptors/flat.map/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/flat_map.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/container.adaptors/flat.map/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/flat_multimap.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/container.adaptors/flat.multimap/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/flat_multimap.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/container.adaptors/flat.multimap/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/flat_multiset.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/container.adaptors/flat.multiset/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/flat_multiset.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/container.adaptors/flat.multiset/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/flat_set.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/container.adaptors/flat.set/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/flat_set.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/container.adaptors/flat.set/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/queue.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/container.adaptors/queue/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/queue.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/container.adaptors/queue/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/stack.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/container.adaptors/stack/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/stack.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/container.adaptors/stack/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/array.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/sequences/array/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/array.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/sequences/array/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/deque.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/sequences/deque/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/deque.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/sequences/deque/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/forward_list.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/sequences/forwardlist/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/forward_list.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/sequences/forwardlist/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/list.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/sequences/list/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/list.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/sequences/list/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/vector.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/sequences/vector/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/vector.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/sequences/vector/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/unordered_map.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/unord/unord.map/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/unordered_map.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/unord/unord.map/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/unordered_multimap.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/unord/unord.multimap/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/unordered_multimap.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/unord/unord.multimap/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/unordered_multiset.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/unord/unord.multiset/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/unordered_multiset.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/unord/unord.multiset/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/unordered_set.nodiscard.verify.cpp b/libcxx/test/libcxx/containers/unord/unord.set/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/unordered_set.nodiscard.verify.cpp
rename to libcxx/test/libcxx/containers/unord/unord.set/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/mutex.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/mutex.nodiscard.verify.cpp
deleted file mode 100644
index c82a7edadcd06..0000000000000
--- a/libcxx/test/libcxx/diagnostics/mutex.nodiscard.verify.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: no-threads
-
-// check that <mutex> functions are marked [[nodiscard]]
-
-#include <mutex>
-#include <chrono>
-#include <utility>
-
-#include "test_macros.h"
-
-void test() {
- // std::scoped_lock
- {
-#if TEST_STD_VER >= 17
- using M = std::mutex;
- M m0, m1, m2;
- // clang-format off
- std::scoped_lock<>{}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- std::scoped_lock<M>{m0}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- std::scoped_lock<M, M>{m0, m1}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- std::scoped_lock<M, M, M>{m0, m1, m2}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
-
- std::scoped_lock<>{std::adopt_lock}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- std::scoped_lock<M>{std::adopt_lock, m0}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- std::scoped_lock<M, M>{std::adopt_lock, m0, m1}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- std::scoped_lock<M, M, M>{std::adopt_lock, m0, m1, m2}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- // clang-format on
-#endif
- }
-
- // std::unique_lock
- {
- using M = std::timed_mutex; // necessary for the time_point and duration constructors
- M m;
- std::chrono::time_point<std::chrono::steady_clock> time_point;
- std::chrono::milliseconds duration;
- std::unique_lock<M> other;
-
- // clang-format off
- std::unique_lock<M>(); // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- (std::unique_lock<M>)(m); // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- std::unique_lock<M>(m, std::defer_lock_t()); // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- std::unique_lock<M>(m, std::try_to_lock_t()); // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- std::unique_lock<M>(m, std::adopt_lock_t()); // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- std::unique_lock<M>(m, time_point); // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- std::unique_lock<M>(m, duration); // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- std::unique_lock<M>(std::move(other)); // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- // clang-format on
- }
-
- // std::lock_guard
- {
- std::mutex m;
- // clang-format off
- (std::lock_guard<std::mutex>)(m); // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- std::lock_guard<std::mutex>(m, std::adopt_lock_t()); // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
- // clang-format on
- }
-}
diff --git a/libcxx/test/libcxx/diagnostics/new.nodiscard.verify.cpp b/libcxx/test/libcxx/diagnostics/new.nodiscard.verify.cpp
deleted file mode 100644
index bd5b9dd001a11..0000000000000
--- a/libcxx/test/libcxx/diagnostics/new.nodiscard.verify.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// <new>
-
-// Check that functions are marked [[nodiscard]]
-
-#include <new>
-
-#include "test_macros.h"
-
-void test() {
- {
- std::bad_alloc ex;
-
- ex.what(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
- }
- {
- std::bad_array_new_length ex;
-
- ex.what(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
- }
-
- {
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- ::operator new(0);
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- ::operator new(0, std::nothrow);
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- ::operator new[](0);
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- ::operator new[](0, std::nothrow);
-#if _LIBCPP_HAS_ALIGNED_ALLOCATION
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- ::operator new(0, std::align_val_t{1});
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- ::operator new(0, std::align_val_t{1}, std::nothrow);
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- ::operator new[](0, std::align_val_t{1});
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- ::operator new[](0, std::align_val_t{1}, std::nothrow);
-#endif // _LIBCPP_HAS_ALIGNED_ALLOCATION
- }
-
-#if TEST_STD_VER >= 17
- {
- int* ptr = nullptr;
-
- std::launder(ptr); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
- }
-#endif
-}
diff --git a/libcxx/test/libcxx/diagnostics/system_error_win_codes.pass.cpp b/libcxx/test/libcxx/diagnostics/syserr/system_error_win_codes.pass.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/system_error_win_codes.pass.cpp
rename to libcxx/test/libcxx/diagnostics/syserr/system_error_win_codes.pass.cpp
diff --git a/libcxx/test/libcxx/diagnostics/filesystem.nodiscard.verify.cpp b/libcxx/test/libcxx/input.output/filesystems/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/filesystem.nodiscard.verify.cpp
rename to libcxx/test/libcxx/input.output/filesystems/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/language.support/nodiscard.verify.cpp b/libcxx/test/libcxx/language.support/nodiscard.verify.cpp
index 6d784f27440e1..3512dffa2cd24 100644
--- a/libcxx/test/libcxx/language.support/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/language.support/nodiscard.verify.cpp
@@ -16,6 +16,7 @@
#include <coroutine>
#include <exception>
#include <initializer_list>
+#include <new>
#include <typeinfo>
#include <typeindex>
@@ -159,4 +160,44 @@ void test() {
bc.what(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
}
#endif
+
+ {
+ std::bad_alloc ex;
+
+ ex.what(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+ }
+ {
+ std::bad_array_new_length ex;
+
+ ex.what(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+ }
+
+ {
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ ::operator new(0);
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ ::operator new(0, std::nothrow);
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ ::operator new[](0);
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ ::operator new[](0, std::nothrow);
+#if _LIBCPP_HAS_ALIGNED_ALLOCATION
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ ::operator new(0, std::align_val_t{1});
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ ::operator new(0, std::align_val_t{1}, std::nothrow);
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ ::operator new[](0, std::align_val_t{1});
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ ::operator new[](0, std::align_val_t{1}, std::nothrow);
+#endif // _LIBCPP_HAS_ALIGNED_ALLOCATION
+ }
+
+#if TEST_STD_VER >= 17
+ {
+ int* ptr = nullptr;
+
+ std::launder(ptr); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+ }
+#endif
}
diff --git a/libcxx/test/libcxx/diagnostics/regex.nodiscard.verify.cpp b/libcxx/test/libcxx/re/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/regex.nodiscard.verify.cpp
rename to libcxx/test/libcxx/re/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/string.nodiscard.verify.cpp b/libcxx/test/libcxx/strings/basic.string/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/string.nodiscard.verify.cpp
rename to libcxx/test/libcxx/strings/basic.string/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/string_view.nodiscard.verify.cpp b/libcxx/test/libcxx/strings/string.view/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/string_view.nodiscard.verify.cpp
rename to libcxx/test/libcxx/strings/string.view/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/thread/nodiscard.verify.cpp b/libcxx/test/libcxx/thread/nodiscard.verify.cpp
index 73e4f932b6369..86218a3e0c4b0 100644
--- a/libcxx/test/libcxx/thread/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/thread/nodiscard.verify.cpp
@@ -22,6 +22,54 @@
const auto timePoint = std::chrono::steady_clock::now();
void test() {
+ // std::scoped_lock
+ {
+#if TEST_STD_VER >= 17
+ using M = std::mutex;
+ M m0, m1, m2;
+ // clang-format off
+ std::scoped_lock<>{}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
+ std::scoped_lock<M>{m0}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
+ std::scoped_lock<M, M>{m0, m1}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
+ std::scoped_lock<M, M, M>{m0, m1, m2}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
+
+ std::scoped_lock<>{std::adopt_lock}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
+ std::scoped_lock<M>{std::adopt_lock, m0}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
+ std::scoped_lock<M, M>{std::adopt_lock, m0, m1}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
+ std::scoped_lock<M, M, M>{std::adopt_lock, m0, m1, m2}; // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
+ // clang-format on
+#endif
+ }
+
+ // std::unique_lock
+ {
+ using M = std::timed_mutex; // necessary for the time_point and duration constructors
+ M m;
+ std::chrono::time_point<std::chrono::steady_clock> time_point;
+ std::chrono::milliseconds duration;
+ std::unique_lock<M> other;
+
+ // clang-format off
+ std::unique_lock<M>(); // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
+ (std::unique_lock<M>)(m); // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
+ std::unique_lock<M>(m, std::defer_lock_t()); // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
+ std::unique_lock<M>(m, std::try_to_lock_t()); // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
+ std::unique_lock<M>(m, std::adopt_lock_t()); // expected-warning {{ignoring temporary created by a constructor declared with 'nodiscard' attribute}}
+ std::unique_lock<M>(m, time_point); ...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/173451
More information about the libcxx-commits
mailing list