[libcxx-commits] [libcxx] [libc++] Make std::unique_lock available with _LIBCPP_HAS_NO_THREADS (PR #99562)
Paul Kirth via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Jul 30 08:28:42 PDT 2024
https://github.com/ilovepi updated https://github.com/llvm/llvm-project/pull/99562
>From 519b828f34b70f54524cd3ad768c7e1554e8e2d6 Mon Sep 17 00:00:00 2001
From: Paul Kirth <paulkirth at google.com>
Date: Thu, 18 Jul 2024 13:41:59 -0700
Subject: [PATCH 1/6] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?=
=?UTF-8?q?itial=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Created using spr 1.3.4
---
libcxx/include/__mutex/unique_lock.h | 4 -
.../thread.lock.unique/implicit_ctad.pass.cpp | 6 +-
....fail.cpp => copy_assign.compile.pass.cpp} | 19 +---
...le.fail.cpp => copy_ctor.compile.pass.cpp} | 17 +---
.../thread.lock.unique.cons/default.pass.cpp | 14 ++-
.../move_assign.pass.cpp | 20 ++---
.../move_ctor.pass.cpp | 20 ++---
.../mutex_adopt_lock.pass.cpp | 19 ++--
.../mutex_defer_lock.pass.cpp | 19 ++--
.../try_lock.pass.cpp | 66 +++++---------
.../try_lock_for.pass.cpp | 71 ++++++---------
.../try_lock_until.pass.cpp | 71 ++++++---------
.../unlock.pass.cpp | 53 ++++-------
.../member_swap.pass.cpp | 34 +++----
.../nonmember_swap.pass.cpp | 34 +++----
.../thread.lock.unique.mod/release.pass.cpp | 48 ++++------
.../thread.lock.unique.obs/mutex.pass.cpp | 22 +++--
.../thread.lock.unique.obs/op_bool.pass.cpp | 28 +++---
.../thread.lock.unique.obs/owns_lock.pass.cpp | 22 +++--
.../thread.lock/thread.lock.unique/types.h | 88 +++++++++++++++++++
20 files changed, 308 insertions(+), 367 deletions(-)
rename libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/{copy_assign.compile.fail.cpp => copy_assign.compile.pass.cpp} (59%)
rename libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/{copy_ctor.compile.fail.cpp => copy_ctor.compile.pass.cpp} (61%)
create mode 100644 libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/types.h
diff --git a/libcxx/include/__mutex/unique_lock.h b/libcxx/include/__mutex/unique_lock.h
index 4a616ba51ee1c..5df791de4c742 100644
--- a/libcxx/include/__mutex/unique_lock.h
+++ b/libcxx/include/__mutex/unique_lock.h
@@ -22,8 +22,6 @@
# pragma GCC system_header
#endif
-#ifndef _LIBCPP_HAS_NO_THREADS
-
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _Mutex>
@@ -172,6 +170,4 @@ inline _LIBCPP_HIDE_FROM_ABI void swap(unique_lock<_Mutex>& __x, unique_lock<_Mu
_LIBCPP_END_NAMESPACE_STD
-#endif // _LIBCPP_HAS_NO_THREADS
-
#endif // _LIBCPP___MUTEX_UNIQUE_LOCK_H
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/implicit_ctad.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/implicit_ctad.pass.cpp
index 337ad4c45a94d..8c7ca4279eead 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/implicit_ctad.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/implicit_ctad.pass.cpp
@@ -6,7 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// UNSUPPORTED: no-threads
// UNSUPPORTED: c++03, c++11, c++14
// <mutex>
@@ -18,12 +17,13 @@
#include <mutex>
#include "test_macros.h"
+#include "types.h"
int main(int, char**) {
- std::mutex mutex;
+ MyMutex mutex;
{
std::unique_lock lock(mutex);
- ASSERT_SAME_TYPE(decltype(lock), std::unique_lock<std::mutex>);
+ ASSERT_SAME_TYPE(decltype(lock), std::unique_lock<MyMutex>);
}
return 0;
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/copy_assign.compile.fail.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/copy_assign.compile.pass.cpp
similarity index 59%
rename from libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/copy_assign.compile.fail.cpp
rename to libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/copy_assign.compile.pass.cpp
index 799cb61f9b21e..9ab8369637cdc 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/copy_assign.compile.fail.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/copy_assign.compile.pass.cpp
@@ -13,22 +13,7 @@
// unique_lock& operator=(unique_lock const&) = delete;
#include <mutex>
-#include <cassert>
-int main(int, char**)
-{
- {
- typedef std::mutex M;
- M m0;
- M m1;
- std::unique_lock<M> lk0(m0);
- std::unique_lock<M> lk1(m1);
- lk1 = lk0;
- assert(lk1.mutex() == &m0);
- assert(lk1.owns_lock() == true);
- assert(lk0.mutex() == nullptr);
- assert(lk0.owns_lock() == false);
- }
+#include "../types.h"
- return 0;
-}
+static_assert(!std::is_copy_assignable<std::lock_guard<MyMutex> >::value, "");
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/copy_ctor.compile.fail.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/copy_ctor.compile.pass.cpp
similarity index 61%
rename from libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/copy_ctor.compile.fail.cpp
rename to libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/copy_ctor.compile.pass.cpp
index e258198e60bbf..e846061f5fbd0 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/copy_ctor.compile.fail.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/copy_ctor.compile.pass.cpp
@@ -13,20 +13,7 @@
// unique_lock(unique_lock const&) = delete;
#include <mutex>
-#include <cassert>
-int main(int, char**)
-{
- {
- typedef std::mutex M;
- M m;
- std::unique_lock<M> lk0(m);
- std::unique_lock<M> lk = lk0;
- assert(lk.mutex() == &m);
- assert(lk.owns_lock() == true);
- assert(lk0.mutex() == nullptr);
- assert(lk0.owns_lock() == false);
- }
+#include "../types.h"
- return 0;
-}
+static_assert(!std::is_copy_constructible<std::lock_guard<MyMutex> >::value, "");
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/default.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/default.pass.cpp
index 2034a26b1d913..6fc4f7f23ced3 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/default.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/default.pass.cpp
@@ -5,8 +5,6 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-//
-// UNSUPPORTED: no-threads
// <mutex>
@@ -14,16 +12,16 @@
// unique_lock();
-#include <mutex>
#include <cassert>
+#include <mutex>
#include "test_macros.h"
+#include "../types.h"
-int main(int, char**)
-{
- std::unique_lock<std::mutex> ul;
- assert(!ul.owns_lock());
- assert(ul.mutex() == nullptr);
+int main(int, char**) {
+ std::unique_lock<MyMutex> ul;
+ assert(!ul.owns_lock());
+ assert(ul.mutex() == nullptr);
return 0;
}
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_assign.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_assign.pass.cpp
index 0af918c1e20ee..9563fdebd3e06 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_assign.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_assign.pass.cpp
@@ -5,8 +5,6 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-//
-// UNSUPPORTED: no-threads, c++03
// <mutex>
@@ -14,16 +12,16 @@
// unique_lock& operator=(unique_lock&& u);
-#include <mutex>
#include <cassert>
-#include "nasty_containers.h"
+#include <mutex>
+#include "nasty_containers.h"
+#include "../types.h"
#include "test_macros.h"
-int main(int, char**)
-{
- {
- typedef std::mutex M;
+int main(int, char**) {
+ {
+ typedef MyMutex M;
M m0;
M m1;
std::unique_lock<M> lk0(m0);
@@ -33,8 +31,8 @@ int main(int, char**)
assert(lk1.owns_lock() == true);
assert(lk0.mutex() == nullptr);
assert(lk0.owns_lock() == false);
- }
- {
+ }
+ {
typedef nasty_mutex M;
M m0;
M m1;
@@ -45,7 +43,7 @@ int main(int, char**)
assert(lk1.owns_lock() == true);
assert(lk0.mutex() == nullptr);
assert(lk0.owns_lock() == false);
- }
+ }
return 0;
}
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_ctor.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_ctor.pass.cpp
index cce0eb5fb9057..ad43b44e6fa96 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_ctor.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_ctor.pass.cpp
@@ -5,8 +5,6 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-//
-// UNSUPPORTED: no-threads, c++03
// <mutex>
@@ -14,16 +12,16 @@
// unique_lock(unique_lock&& u);
-#include <mutex>
#include <cassert>
-#include "nasty_containers.h"
+#include <mutex>
+#include "nasty_containers.h"
+#include "../types.h"
#include "test_macros.h"
-int main(int, char**)
-{
- {
- typedef std::mutex M;
+int main(int, char**) {
+ {
+ typedef MyMutex M;
M m;
std::unique_lock<M> lk0(m);
std::unique_lock<M> lk = std::move(lk0);
@@ -31,8 +29,8 @@ int main(int, char**)
assert(lk.owns_lock() == true);
assert(lk0.mutex() == nullptr);
assert(lk0.owns_lock() == false);
- }
- {
+ }
+ {
typedef nasty_mutex M;
M m;
std::unique_lock<M> lk0(m);
@@ -41,7 +39,7 @@ int main(int, char**)
assert(lk.owns_lock() == true);
assert(lk0.mutex() == nullptr);
assert(lk0.owns_lock() == false);
- }
+ }
return 0;
}
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_adopt_lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_adopt_lock.pass.cpp
index 4adbe26777d0b..28cc43853180e 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_adopt_lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_adopt_lock.pass.cpp
@@ -6,7 +6,6 @@
//
//===----------------------------------------------------------------------===//
//
-// UNSUPPORTED: no-threads
// UNSUPPORTED: c++03
// <mutex>
@@ -15,30 +14,30 @@
// unique_lock(mutex_type& m, adopt_lock_t);
-#include <mutex>
#include <cassert>
-#include "nasty_containers.h"
+#include <mutex>
+#include "nasty_containers.h"
+#include "../types.h"
#include "test_macros.h"
-int main(int, char**)
-{
- {
- typedef std::mutex M;
+int main(int, char**) {
+ {
+ typedef MyMutex M;
M m;
m.lock();
std::unique_lock<M> lk(m, std::adopt_lock);
assert(lk.mutex() == std::addressof(m));
assert(lk.owns_lock() == true);
- }
- {
+ }
+ {
typedef nasty_mutex M;
M m;
m.lock();
std::unique_lock<M> lk(m, std::adopt_lock);
assert(lk.mutex() == std::addressof(m));
assert(lk.owns_lock() == true);
- }
+ }
return 0;
}
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_defer_lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_defer_lock.pass.cpp
index 06ef2043edcef..96a9afbc9438c 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_defer_lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_defer_lock.pass.cpp
@@ -6,7 +6,6 @@
//
//===----------------------------------------------------------------------===//
//
-// UNSUPPORTED: no-threads
// UNSUPPORTED: c++03
// <mutex>
@@ -15,28 +14,28 @@
// unique_lock(mutex_type& m, defer_lock_t);
-#include <mutex>
#include <cassert>
-#include "nasty_containers.h"
+#include <mutex>
+#include "nasty_containers.h"
+#include "../types.h"
#include "test_macros.h"
-int main(int, char**)
-{
- {
- typedef std::mutex M;
+int main(int, char**) {
+ {
+ typedef MyMutex M;
M m;
std::unique_lock<M> lk(m, std::defer_lock);
assert(lk.mutex() == std::addressof(m));
assert(lk.owns_lock() == false);
- }
- {
+ }
+ {
typedef nasty_mutex M;
M m;
std::unique_lock<M> lk(m, std::defer_lock);
assert(lk.mutex() == std::addressof(m));
assert(lk.owns_lock() == false);
- }
+ }
return 0;
}
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock.pass.cpp
index 4cf5ec2ab5ccf..b49390ae590c8 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock.pass.cpp
@@ -21,53 +21,35 @@
#include <system_error>
#include "test_macros.h"
+#include "../types.h"
-bool try_lock_called = false;
+MyTimedMutex m;
-struct mutex
-{
- bool try_lock()
- {
- try_lock_called = !try_lock_called;
- return try_lock_called;
- }
- void unlock() {}
-};
-
-mutex m;
-
-int main(int, char**)
-{
- std::unique_lock<mutex> lk(m, std::defer_lock);
- assert(lk.try_lock() == true);
- assert(try_lock_called == true);
- assert(lk.owns_lock() == true);
+int main(int, char**) {
+ std::unique_lock<MyTimedMutex> lk(m, std::defer_lock);
+ assert(lk.try_lock() == true);
+ assert(m.try_lock_called == true);
+ assert(lk.owns_lock() == true);
#ifndef TEST_HAS_NO_EXCEPTIONS
- try
- {
- TEST_IGNORE_NODISCARD lk.try_lock();
- assert(false);
- }
- catch (std::system_error& e)
- {
- assert(e.code().value() == EDEADLK);
- }
+ try {
+ TEST_IGNORE_NODISCARD lk.try_lock();
+ assert(false);
+ } catch (std::system_error& e) {
+ assert(e.code().value() == EDEADLK);
+ }
#endif
- lk.unlock();
- assert(lk.try_lock() == false);
- assert(try_lock_called == false);
- assert(lk.owns_lock() == false);
- lk.release();
+ lk.unlock();
+ assert(lk.try_lock() == false);
+ assert(m.try_lock_called == false);
+ assert(lk.owns_lock() == false);
+ lk.release();
#ifndef TEST_HAS_NO_EXCEPTIONS
- try
- {
- TEST_IGNORE_NODISCARD lk.try_lock();
- assert(false);
- }
- catch (std::system_error& e)
- {
- assert(e.code().value() == EPERM);
- }
+ try {
+ TEST_IGNORE_NODISCARD lk.try_lock();
+ assert(false);
+ } catch (std::system_error& e) {
+ assert(e.code().value() == EPERM);
+ }
#endif
return 0;
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_for.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_for.pass.cpp
index 8e7004e5eec85..01c3e34af113b 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_for.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_for.pass.cpp
@@ -21,57 +21,36 @@
#include <system_error>
#include "test_macros.h"
+#include "../types.h"
-bool try_lock_for_called = false;
+MyTimedMutex m;
-typedef std::chrono::milliseconds ms;
-
-struct mutex
-{
- template <class Rep, class Period>
- bool try_lock_for(const std::chrono::duration<Rep, Period>& rel_time)
- {
- assert(rel_time == ms(5));
- try_lock_for_called = !try_lock_for_called;
- return try_lock_for_called;
- }
- void unlock() {}
-};
-
-mutex m;
-
-int main(int, char**)
-{
- std::unique_lock<mutex> lk(m, std::defer_lock);
- assert(lk.try_lock_for(ms(5)) == true);
- assert(try_lock_for_called == true);
- assert(lk.owns_lock() == true);
+int main(int, char**) {
+ using ms = std::chrono::milliseconds;
+ std::unique_lock<MyTimedMutex> lk(m, std::defer_lock);
+ assert(lk.try_lock_for(ms(5)) == true);
+ assert(m.try_lock_for_called == true);
+ assert(lk.owns_lock() == true);
#ifndef TEST_HAS_NO_EXCEPTIONS
- try
- {
- TEST_IGNORE_NODISCARD lk.try_lock_for(ms(5));
- assert(false);
- }
- catch (std::system_error& e)
- {
- assert(e.code().value() == EDEADLK);
- }
+ try {
+ TEST_IGNORE_NODISCARD lk.try_lock_for(ms(5));
+ assert(false);
+ } catch (std::system_error& e) {
+ assert(e.code().value() == EDEADLK);
+ }
#endif
- lk.unlock();
- assert(lk.try_lock_for(ms(5)) == false);
- assert(try_lock_for_called == false);
- assert(lk.owns_lock() == false);
- lk.release();
+ lk.unlock();
+ assert(lk.try_lock_for(ms(5)) == false);
+ assert(m.try_lock_for_called == false);
+ assert(lk.owns_lock() == false);
+ lk.release();
#ifndef TEST_HAS_NO_EXCEPTIONS
- try
- {
- TEST_IGNORE_NODISCARD lk.try_lock_for(ms(5));
- assert(false);
- }
- catch (std::system_error& e)
- {
- assert(e.code().value() == EPERM);
- }
+ try {
+ TEST_IGNORE_NODISCARD lk.try_lock_for(ms(5));
+ assert(false);
+ } catch (std::system_error& e) {
+ assert(e.code().value() == EPERM);
+ }
#endif
return 0;
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp
index 077bc517399ab..01e70c32f50a9 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp
@@ -21,57 +21,36 @@
#include <system_error>
#include "test_macros.h"
+#include "../types.h"
-bool try_lock_until_called = false;
+MyTimedMutex m;
-struct mutex
-{
- template <class Clock, class Duration>
- bool try_lock_until(const std::chrono::time_point<Clock, Duration>& abs_time)
- {
- typedef std::chrono::milliseconds ms;
- assert(Clock::now() - abs_time < ms(5));
- try_lock_until_called = !try_lock_until_called;
- return try_lock_until_called;
- }
- void unlock() {}
-};
-
-mutex m;
-
-int main(int, char**)
-{
- typedef std::chrono::steady_clock Clock;
- std::unique_lock<mutex> lk(m, std::defer_lock);
- assert(lk.try_lock_until(Clock::now()) == true);
- assert(try_lock_until_called == true);
- assert(lk.owns_lock() == true);
+int main(int, char**) {
+ typedef std::chrono::steady_clock Clock;
+ std::unique_lock<MyTimedMutex> lk(m, std::defer_lock);
+ assert(lk.try_lock_until(Clock::now()) == true);
+ assert(m.try_lock_until_called == true);
+ assert(lk.owns_lock() == true);
#ifndef TEST_HAS_NO_EXCEPTIONS
- try
- {
- TEST_IGNORE_NODISCARD lk.try_lock_until(Clock::now());
- assert(false);
- }
- catch (std::system_error& e)
- {
- assert(e.code().value() == EDEADLK);
- }
+ try {
+ TEST_IGNORE_NODISCARD lk.try_lock_until(Clock::now());
+ assert(false);
+ } catch (std::system_error& e) {
+ assert(e.code().value() == EDEADLK);
+ }
#endif
- lk.unlock();
- assert(lk.try_lock_until(Clock::now()) == false);
- assert(try_lock_until_called == false);
- assert(lk.owns_lock() == false);
- lk.release();
+ lk.unlock();
+ assert(lk.try_lock_until(Clock::now()) == false);
+ assert(m.try_lock_until_called == false);
+ assert(lk.owns_lock() == false);
+ lk.release();
#ifndef TEST_HAS_NO_EXCEPTIONS
- try
- {
- TEST_IGNORE_NODISCARD lk.try_lock_until(Clock::now());
- assert(false);
- }
- catch (std::system_error& e)
- {
- assert(e.code().value() == EPERM);
- }
+ try {
+ TEST_IGNORE_NODISCARD lk.try_lock_until(Clock::now());
+ assert(false);
+ } catch (std::system_error& e) {
+ assert(e.code().value() == EPERM);
+ }
#endif
return 0;
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/unlock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/unlock.pass.cpp
index 30c795150dace..af7761e196cc4 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/unlock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/unlock.pass.cpp
@@ -19,45 +19,30 @@
#include <system_error>
#include "test_macros.h"
+#include "../types.h"
-bool unlock_called = false;
+MyMutex m;
-struct mutex
-{
- void lock() {}
- void unlock() {unlock_called = true;}
-};
-
-mutex m;
-
-int main(int, char**)
-{
- std::unique_lock<mutex> lk(m);
- lk.unlock();
- assert(unlock_called == true);
- assert(lk.owns_lock() == false);
+int main(int, char**) {
+ std::unique_lock<MyMutex> lk(m);
+ lk.unlock();
+ assert(lk.owns_lock() == false);
#ifndef TEST_HAS_NO_EXCEPTIONS
- try
- {
- lk.unlock();
- assert(false);
- }
- catch (std::system_error& e)
- {
- assert(e.code().value() == EPERM);
- }
+ try {
+ lk.unlock();
+ assert(false);
+ } catch (std::system_error& e) {
+ assert(e.code().value() == EPERM);
+ }
#endif
- lk.release();
+ lk.release();
#ifndef TEST_HAS_NO_EXCEPTIONS
- try
- {
- lk.unlock();
- assert(false);
- }
- catch (std::system_error& e)
- {
- assert(e.code().value() == EPERM);
- }
+ try {
+ lk.unlock();
+ assert(false);
+ } catch (std::system_error& e) {
+ assert(e.code().value() == EPERM);
+ }
#endif
return 0;
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/member_swap.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/member_swap.pass.cpp
index fc12d3baea202..361c85e015059 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/member_swap.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/member_swap.pass.cpp
@@ -5,8 +5,6 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-//
-// UNSUPPORTED: no-threads
// <mutex>
@@ -14,28 +12,22 @@
// void swap(unique_lock& u);
-#include <mutex>
#include <cassert>
+#include <mutex>
#include "test_macros.h"
-
-struct mutex
-{
- void lock() {}
- void unlock() {}
-};
-
-mutex m;
-
-int main(int, char**)
-{
- std::unique_lock<mutex> lk1(m);
- std::unique_lock<mutex> lk2;
- lk1.swap(lk2);
- assert(lk1.mutex() == nullptr);
- assert(lk1.owns_lock() == false);
- assert(lk2.mutex() == &m);
- assert(lk2.owns_lock() == true);
+#include "../types.h"
+
+MyMutex m;
+
+int main(int, char**) {
+ std::unique_lock<MyMutex> lk1(m);
+ std::unique_lock<MyMutex> lk2;
+ lk1.swap(lk2);
+ assert(lk1.mutex() == nullptr);
+ assert(lk1.owns_lock() == false);
+ assert(lk2.mutex() == &m);
+ assert(lk2.owns_lock() == true);
return 0;
}
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/nonmember_swap.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/nonmember_swap.pass.cpp
index 03d268c4b9306..5133032f6ae39 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/nonmember_swap.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/nonmember_swap.pass.cpp
@@ -5,8 +5,6 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-//
-// UNSUPPORTED: no-threads
// <mutex>
@@ -15,28 +13,22 @@
// template <class Mutex>
// void swap(unique_lock<Mutex>& x, unique_lock<Mutex>& y);
-#include <mutex>
#include <cassert>
+#include <mutex>
#include "test_macros.h"
-
-struct mutex
-{
- void lock() {}
- void unlock() {}
-};
-
-mutex m;
-
-int main(int, char**)
-{
- std::unique_lock<mutex> lk1(m);
- std::unique_lock<mutex> lk2;
- swap(lk1, lk2);
- assert(lk1.mutex() == nullptr);
- assert(lk1.owns_lock() == false);
- assert(lk2.mutex() == &m);
- assert(lk2.owns_lock() == true);
+#include "../types.h"
+
+MyMutex m;
+
+int main(int, char**) {
+ std::unique_lock<MyMutex> lk1(m);
+ std::unique_lock<MyMutex> lk2;
+ swap(lk1, lk2);
+ assert(lk1.mutex() == nullptr);
+ assert(lk1.owns_lock() == false);
+ assert(lk2.mutex() == &m);
+ assert(lk2.owns_lock() == true);
return 0;
}
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/release.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/release.pass.cpp
index 4f2d59c3d333d..a726c8ccc060a 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/release.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/release.pass.cpp
@@ -5,8 +5,6 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-//
-// UNSUPPORTED: no-threads
// <mutex>
@@ -14,36 +12,28 @@
// mutex_type* release() noexcept;
-#include <mutex>
#include <cassert>
+#include <mutex>
#include "test_macros.h"
-
-struct mutex
-{
- static int lock_count;
- static int unlock_count;
- void lock() {++lock_count;}
- void unlock() {++unlock_count;}
-};
-
-int mutex::lock_count = 0;
-int mutex::unlock_count = 0;
-
-mutex m;
-
-int main(int, char**)
-{
- std::unique_lock<mutex> lk(m);
- assert(lk.mutex() == &m);
- assert(lk.owns_lock() == true);
- assert(mutex::lock_count == 1);
- assert(mutex::unlock_count == 0);
- assert(lk.release() == &m);
- assert(lk.mutex() == nullptr);
- assert(lk.owns_lock() == false);
- assert(mutex::lock_count == 1);
- assert(mutex::unlock_count == 0);
+#include "../types.h"
+
+int MyCountingMutex::lock_count = 0;
+int MyCountingMutex::unlock_count = 0;
+
+MyCountingMutex m;
+
+int main(int, char**) {
+ std::unique_lock<MyCountingMutex> lk(m);
+ assert(lk.mutex() == &m);
+ assert(lk.owns_lock() == true);
+ assert(MyCountingMutex::lock_count == 1);
+ assert(MyCountingMutex::unlock_count == 0);
+ assert(lk.release() == &m);
+ assert(lk.mutex() == nullptr);
+ assert(lk.owns_lock() == false);
+ assert(MyCountingMutex::lock_count == 1);
+ assert(MyCountingMutex::unlock_count == 0);
return 0;
}
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/mutex.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/mutex.pass.cpp
index dd2f5239645f9..72346e8c67e25 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/mutex.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/mutex.pass.cpp
@@ -5,8 +5,6 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-//
-// UNSUPPORTED: no-threads
// <mutex>
@@ -14,21 +12,21 @@
// mutex_type *mutex() const;
-#include <mutex>
#include <cassert>
+#include <mutex>
#include "test_macros.h"
+#include "../types.h"
-std::mutex m;
+MyMutex m;
-int main(int, char**)
-{
- std::unique_lock<std::mutex> lk0;
- assert(lk0.mutex() == nullptr);
- std::unique_lock<std::mutex> lk1(m);
- assert(lk1.mutex() == &m);
- lk1.unlock();
- assert(lk1.mutex() == &m);
+int main(int, char**) {
+ std::unique_lock<MyMutex> lk0;
+ assert(lk0.mutex() == nullptr);
+ std::unique_lock<MyMutex> lk1(m);
+ assert(lk1.mutex() == &m);
+ lk1.unlock();
+ assert(lk1.mutex() == &m);
return 0;
}
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/op_bool.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/op_bool.pass.cpp
index ea05eb7d023a9..3759302a483eb 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/op_bool.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/op_bool.pass.cpp
@@ -5,8 +5,6 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-//
-// UNSUPPORTED: no-threads
// <mutex>
@@ -14,26 +12,26 @@
// explicit operator bool() const noexcept;
-#include <mutex>
#include <cassert>
+#include <mutex>
#include <type_traits>
#include "test_macros.h"
+#include "../types.h"
-std::mutex m;
+MyMutex m;
-int main(int, char**)
-{
- static_assert(std::is_constructible<bool, std::unique_lock<std::mutex> >::value, "");
- static_assert(!std::is_convertible<std::unique_lock<std::mutex>, bool>::value, "");
+int main(int, char**) {
+ static_assert(std::is_constructible<bool, std::unique_lock<MyMutex> >::value, "");
+ static_assert(!std::is_convertible<std::unique_lock<MyMutex>, bool>::value, "");
- std::unique_lock<std::mutex> lk0;
- assert(static_cast<bool>(lk0) == false);
- std::unique_lock<std::mutex> lk1(m);
- assert(static_cast<bool>(lk1) == true);
- lk1.unlock();
- assert(static_cast<bool>(lk1) == false);
- ASSERT_NOEXCEPT(static_cast<bool>(lk0));
+ std::unique_lock<MyMutex> lk0;
+ assert(static_cast<bool>(lk0) == false);
+ std::unique_lock<MyMutex> lk1(m);
+ assert(static_cast<bool>(lk1) == true);
+ lk1.unlock();
+ assert(static_cast<bool>(lk1) == false);
+ ASSERT_NOEXCEPT(static_cast<bool>(lk0));
return 0;
}
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/owns_lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/owns_lock.pass.cpp
index 9b192fbcd621e..163942786323a 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/owns_lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/owns_lock.pass.cpp
@@ -5,8 +5,6 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-//
-// UNSUPPORTED: no-threads
// <mutex>
@@ -14,21 +12,21 @@
// bool owns_lock() const;
-#include <mutex>
#include <cassert>
+#include <mutex>
#include "test_macros.h"
+#include "../types.h"
-std::mutex m;
+MyMutex m;
-int main(int, char**)
-{
- std::unique_lock<std::mutex> lk0;
- assert(lk0.owns_lock() == false);
- std::unique_lock<std::mutex> lk1(m);
- assert(lk1.owns_lock() == true);
- lk1.unlock();
- assert(lk1.owns_lock() == false);
+int main(int, char**) {
+ std::unique_lock<MyMutex> lk0;
+ assert(lk0.owns_lock() == false);
+ std::unique_lock<MyMutex> lk1(m);
+ assert(lk1.owns_lock() == true);
+ lk1.unlock();
+ assert(lk1.owns_lock() == false);
return 0;
}
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/types.h b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/types.h
new file mode 100644
index 0000000000000..15a1a531487f5
--- /dev/null
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/types.h
@@ -0,0 +1,88 @@
+//===----------------------------------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef TEST_STD_THREAD_THREAD_MUTEX_THREAD_LOCK_THREAD_LOCK_GUARD_TYPES_H
+#define TEST_STD_THREAD_THREAD_MUTEX_THREAD_LOCK_THREAD_LOCK_GUARD_TYPES_H
+
+#include <cassert>
+#include <chrono>
+
+struct MyMutex {
+ bool locked = false;
+
+ MyMutex() = default;
+ ~MyMutex() { assert(!locked); }
+
+ void lock() {
+ assert(!locked);
+ locked = true;
+ }
+
+ void unlock() {
+ assert(locked);
+ locked = false;
+ }
+
+ bool try_lock() {
+ if (locked)
+ return false;
+ lock();
+ return true;
+ }
+
+ template <class Rep, class Period>
+ bool try_lock_for(const std::chrono::duration<Rep, Period>& rel_time) {
+ using ms = std::chrono::milliseconds;
+ assert(rel_time == ms(5));
+ if (locked)
+ return false;
+ lock();
+ return true;
+ }
+
+ MyMutex(MyMutex const&) = delete;
+ MyMutex& operator=(MyMutex const&) = delete;
+};
+
+struct MyTimedMutex {
+ using ms = std::chrono::milliseconds;
+
+ bool try_lock_called = false;
+ bool try_lock_for_called = false;
+ bool try_lock_until_called = false;
+
+ bool try_lock() {
+ try_lock_called = !try_lock_called;
+ return try_lock_called;
+ }
+
+ template <class Rep, class Period>
+ bool try_lock_for(const std::chrono::duration<Rep, Period>& rel_time) {
+ assert(rel_time == ms(5));
+ try_lock_for_called = !try_lock_for_called;
+ return try_lock_for_called;
+ }
+
+ template <class Clock, class Duration>
+ bool try_lock_until(const std::chrono::time_point<Clock, Duration>& abs_time) {
+ assert(Clock::now() - abs_time < ms(5));
+ try_lock_until_called = !try_lock_until_called;
+ return try_lock_until_called;
+ }
+
+ void unlock() {}
+};
+
+struct MyCountingMutex {
+ static int lock_count;
+ static int unlock_count;
+ void lock() { ++lock_count; }
+ void unlock() { ++unlock_count; }
+};
+
+#endif // TEST_STD_THREAD_THREAD_MUTEX_THREAD_LOCK_THREAD_LOCK_GUARD_TYPES_H
>From 1d21ae1d9a15478167d9f6b05f2b7971e5a1d966 Mon Sep 17 00:00:00 2001
From: Paul Kirth <paulkirth at google.com>
Date: Wed, 24 Jul 2024 14:45:25 -0700
Subject: [PATCH 2/6] Remove no-threads from some files I missed
Created using spr 1.3.4
---
.../thread.lock.unique.cons/move_ctor.pass.cpp | 2 ++
.../thread.lock.unique.locking/try_lock.pass.cpp | 1 -
.../thread.lock.unique.locking/try_lock_for.pass.cpp | 1 -
.../thread.lock.unique.locking/try_lock_until.pass.cpp | 1 -
.../thread.lock.unique.locking/unlock.pass.cpp | 2 --
5 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_ctor.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_ctor.pass.cpp
index ad43b44e6fa96..08f6fc8410e25 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_ctor.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_ctor.pass.cpp
@@ -5,6 +5,8 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
+//
+// UNSUPPORTED: c++03
// <mutex>
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock.pass.cpp
index b49390ae590c8..66af5b698a377 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock.pass.cpp
@@ -6,7 +6,6 @@
//
//===----------------------------------------------------------------------===//
//
-// UNSUPPORTED: no-threads
// UNSUPPORTED: c++03
// ALLOW_RETRIES: 2
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_for.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_for.pass.cpp
index 01c3e34af113b..032b119ee3168 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_for.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_for.pass.cpp
@@ -6,7 +6,6 @@
//
//===----------------------------------------------------------------------===//
//
-// UNSUPPORTED: no-threads
// UNSUPPORTED: c++03
// <mutex>
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp
index 01e70c32f50a9..14f61a7483433 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp
@@ -6,7 +6,6 @@
//
//===----------------------------------------------------------------------===//
//
-// UNSUPPORTED: no-threads
// UNSUPPORTED: c++03
// <mutex>
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/unlock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/unlock.pass.cpp
index af7761e196cc4..b2926a095ee15 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/unlock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/unlock.pass.cpp
@@ -5,8 +5,6 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-//
-// UNSUPPORTED: no-threads
// <mutex>
>From 5d401307ee2003576857ce4b43e2a8a6c6905994 Mon Sep 17 00:00:00 2001
From: Paul Kirth <paulkirth at google.com>
Date: Wed, 24 Jul 2024 15:27:39 -0700
Subject: [PATCH 3/6] Update test to be a compile test
Created using spr 1.3.4
---
.../{types.pass.cpp => types.compile.pass.cpp} | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
rename libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/{types.pass.cpp => types.compile.pass.cpp} (74%)
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/types.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/types.compile.pass.cpp
similarity index 74%
rename from libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/types.pass.cpp
rename to libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/types.compile.pass.cpp
index d8497888f59bb..312863ae8e743 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/types.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/types.compile.pass.cpp
@@ -5,8 +5,6 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-//
-// UNSUPPORTED: no-threads
// <mutex>
@@ -22,11 +20,6 @@
#include <type_traits>
#include "test_macros.h"
+#include "types.h"
-int main(int, char**)
-{
- static_assert((std::is_same<std::unique_lock<std::mutex>::mutex_type,
- std::mutex>::value), "");
-
- return 0;
-}
+static_assert((std::is_same<std::unique_lock<MyMutex>::mutex_type, MyMutex>::value), "");
>From 83cf9ff64d0e5849347841f37fa43f30f7e7abb8 Mon Sep 17 00:00:00 2001
From: Paul Kirth <paulkirth at google.com>
Date: Thu, 25 Jul 2024 10:24:01 -0700
Subject: [PATCH 4/6] Add missing header for chrono
Created using spr 1.3.4
---
.../thread.lock.unique.locking/try_lock_until.pass.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp
index 14f61a7483433..b31c2f5ad16ea 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp
@@ -16,6 +16,7 @@
// bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time);
#include <cassert>
+#include <chrono>
#include <mutex>
#include <system_error>
>From 3bc709eeeb1046f01e2e755ee9d96b0b7a420fa2 Mon Sep 17 00:00:00 2001
From: Paul Kirth <paulkirth at google.com>
Date: Fri, 26 Jul 2024 12:27:35 -0700
Subject: [PATCH 5/6] Swap stead_clock for system_clock to satisfy bots
Created using spr 1.3.4
---
.../thread.lock.unique.locking/try_lock_until.pass.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp
index b31c2f5ad16ea..9df3b96116533 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp
@@ -26,7 +26,7 @@
MyTimedMutex m;
int main(int, char**) {
- typedef std::chrono::steady_clock Clock;
+ typedef std::chrono::system_clock Clock;
std::unique_lock<MyTimedMutex> lk(m, std::defer_lock);
assert(lk.try_lock_until(Clock::now()) == true);
assert(m.try_lock_until_called == true);
>From 49dd5d1a2f9e750b1f9e476ace895247d6a57d24 Mon Sep 17 00:00:00 2001
From: Paul Kirth <paulkirth at google.com>
Date: Tue, 30 Jul 2024 08:28:25 -0700
Subject: [PATCH 6/6] Update error code checks
Created using spr 1.3.4
---
.../thread.lock.unique.locking/try_lock.pass.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock.pass.cpp
index 66af5b698a377..2ee5d3766eb18 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**) {
TEST_IGNORE_NODISCARD lk.try_lock();
assert(false);
} catch (std::system_error& e) {
- assert(e.code().value() == EDEADLK);
+ assert(e.code() == std::errc::resource_deadlock_would_occur);
}
#endif
lk.unlock();
@@ -47,7 +47,7 @@ int main(int, char**) {
TEST_IGNORE_NODISCARD lk.try_lock();
assert(false);
} catch (std::system_error& e) {
- assert(e.code().value() == EPERM);
+ assert(e.code() == std::errc::operation_not_permitted);
}
#endif
More information about the libcxx-commits
mailing list