[libcxx-commits] [libcxx] [libc++][NFC] Refactor `[[nodiscard]]` tests (PR #173451)
Hristo Hristov via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Dec 23 21:32:47 PST 2025
https://github.com/H-G-Hristov created https://github.com/llvm/llvm-project/pull/173451
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.
>From a89951c431f2c294f39d1a1111b853be00f85e57 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Wed, 24 Dec 2025 07:32:25 +0200
Subject: [PATCH] [libc++][NFC] Refactor `[[nodiscard]]` tests
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.
---
.../nodiscard.verify.cpp} | 0
.../nodiscard.verify.cpp} | 0
.../associative/map}/map.nodiscard.verify.cpp | 0
.../map}/multimap.nodiscard.verify.cpp | 0
.../set}/multiset.nodiscard.verify.cpp | 0
.../associative/set}/set.nodiscard.verify.cpp | 0
.../flat.map/nodiscard.verify.cpp} | 0
.../flat.multimap/nodiscard.verify.cpp} | 0
.../flat.multiset/nodiscard.verify.cpp} | 0
.../flat.set/nodiscard.verify.cpp} | 0
.../queue/nodiscard.verify.cpp} | 0
.../stack/nodiscard.verify.cpp} | 0
.../sequences/array/nodiscard.verify.cpp} | 0
.../sequences/deque/nodiscard.verify.cpp} | 0
.../forwardlist/nodiscard.verify.cpp} | 0
.../sequences/list/nodiscard.verify.cpp} | 0
.../sequences/vector/nodiscard.verify.cpp} | 0
.../unord/unord.map/nodiscard.verify.cpp} | 0
.../unord.multimap/nodiscard.verify.cpp} | 0
.../unord.multiset/nodiscard.verify.cpp} | 0
.../unord/unord.set/nodiscard.verify.cpp} | 0
.../diagnostics/mutex.nodiscard.verify.cpp | 67 -------------------
.../diagnostics/new.nodiscard.verify.cpp | 57 ----------------
.../system_error_win_codes.pass.cpp | 0
.../filesystems/nodiscard.verify.cpp} | 0
.../language.support/nodiscard.verify.cpp | 41 ++++++++++++
.../nodiscard.verify.cpp} | 0
.../basic.string/nodiscard.verify.cpp} | 0
.../string.view/nodiscard.verify.cpp} | 0
.../test/libcxx/thread/nodiscard.verify.cpp | 48 +++++++++++++
.../nodiscard.verify.cpp} | 0
.../format/nodiscard.verify.cpp} | 0
.../function.objects/nodiscard.verify.cpp} | 0
.../utility/nodiscard.verify.cpp} | 0
34 files changed, 89 insertions(+), 124 deletions(-)
rename libcxx/test/libcxx/{diagnostics/algorithm.nodiscard.verify.cpp => algorithms/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/atomic.nodiscard.verify.cpp => atomics/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics => containers/associative/map}/map.nodiscard.verify.cpp (100%)
rename libcxx/test/libcxx/{diagnostics => containers/associative/map}/multimap.nodiscard.verify.cpp (100%)
rename libcxx/test/libcxx/{diagnostics => containers/associative/set}/multiset.nodiscard.verify.cpp (100%)
rename libcxx/test/libcxx/{diagnostics => containers/associative/set}/set.nodiscard.verify.cpp (100%)
rename libcxx/test/libcxx/{diagnostics/flat_map.nodiscard.verify.cpp => containers/container.adaptors/flat.map/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/flat_multimap.nodiscard.verify.cpp => containers/container.adaptors/flat.multimap/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/flat_multiset.nodiscard.verify.cpp => containers/container.adaptors/flat.multiset/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/flat_set.nodiscard.verify.cpp => containers/container.adaptors/flat.set/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/queue.nodiscard.verify.cpp => containers/container.adaptors/queue/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/stack.nodiscard.verify.cpp => containers/container.adaptors/stack/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/array.nodiscard.verify.cpp => containers/sequences/array/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/deque.nodiscard.verify.cpp => containers/sequences/deque/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/forward_list.nodiscard.verify.cpp => containers/sequences/forwardlist/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/list.nodiscard.verify.cpp => containers/sequences/list/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/vector.nodiscard.verify.cpp => containers/sequences/vector/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/unordered_map.nodiscard.verify.cpp => containers/unord/unord.map/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/unordered_multimap.nodiscard.verify.cpp => containers/unord/unord.multimap/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/unordered_multiset.nodiscard.verify.cpp => containers/unord/unord.multiset/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/unordered_set.nodiscard.verify.cpp => containers/unord/unord.set/nodiscard.verify.cpp} (100%)
delete mode 100644 libcxx/test/libcxx/diagnostics/mutex.nodiscard.verify.cpp
delete mode 100644 libcxx/test/libcxx/diagnostics/new.nodiscard.verify.cpp
rename libcxx/test/libcxx/diagnostics/{ => syserr}/system_error_win_codes.pass.cpp (100%)
rename libcxx/test/libcxx/{diagnostics/filesystem.nodiscard.verify.cpp => input.output/filesystems/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/regex.nodiscard.verify.cpp => re/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/string.nodiscard.verify.cpp => strings/basic.string/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/string_view.nodiscard.verify.cpp => strings/string.view/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/chrono.nodiscard.verify.cpp => time/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/format.nodiscard.verify.cpp => utilities/format/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/functional.nodiscard.verify.cpp => utilities/function.objects/nodiscard.verify.cpp} (100%)
rename libcxx/test/libcxx/{diagnostics/utility.nodiscard.verify.cpp => utilities/utility/nodiscard.verify.cpp} (100%)
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); // 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
+ }
+
// Threads
{
std::thread th;
diff --git a/libcxx/test/libcxx/diagnostics/chrono.nodiscard.verify.cpp b/libcxx/test/libcxx/time/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/chrono.nodiscard.verify.cpp
rename to libcxx/test/libcxx/time/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/format.nodiscard.verify.cpp b/libcxx/test/libcxx/utilities/format/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/format.nodiscard.verify.cpp
rename to libcxx/test/libcxx/utilities/format/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/functional.nodiscard.verify.cpp b/libcxx/test/libcxx/utilities/function.objects/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/functional.nodiscard.verify.cpp
rename to libcxx/test/libcxx/utilities/function.objects/nodiscard.verify.cpp
diff --git a/libcxx/test/libcxx/diagnostics/utility.nodiscard.verify.cpp b/libcxx/test/libcxx/utilities/utility/nodiscard.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/utility.nodiscard.verify.cpp
rename to libcxx/test/libcxx/utilities/utility/nodiscard.verify.cpp
More information about the libcxx-commits
mailing list