[llvm-branch-commits] [libcxx] 5646280 - [libc++] Introduce an indirection to create threads in the test suite
Louis Dionne via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Nov 27 09:01:02 PST 2020
Author: Louis Dionne
Date: 2020-11-27T11:54:19-05:00
New Revision: 564628014c404bf57aa7cd9a5337198046bdd1ed
URL: https://github.com/llvm/llvm-project/commit/564628014c404bf57aa7cd9a5337198046bdd1ed
DIFF: https://github.com/llvm/llvm-project/commit/564628014c404bf57aa7cd9a5337198046bdd1ed.diff
LOG: [libc++] Introduce an indirection to create threads in the test suite
We create threads using std::thread in various places in the test suite.
However, the usual std::thread constructor may not work on all platforms,
e.g. on platforms where passing a stack size is required to create a thread.
This commit introduces a simple indirection that makes it easier to tweak
how threads are created inside the test suite on various platforms. Note
that tests that are purposefully calling std::thread's constructor directly
(e.g. because that is what they're testing) were not modified.
Added:
libcxx/test/support/make_test_thread.h
Modified:
libcxx/test/libcxx/utilities/memory/util.smartptr/race_condition.pass.cpp
libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.wait/atomic_wait.pass.cpp
libcxx/test/std/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp
libcxx/test/std/thread/futures/futures.promise/set_lvalue_at_thread_exit.pass.cpp
libcxx/test/std/thread/futures/futures.promise/set_rvalue_at_thread_exit.pass.cpp
libcxx/test/std/thread/futures/futures.promise/set_value_at_thread_exit_const.pass.cpp
libcxx/test/std/thread/futures/futures.promise/set_value_at_thread_exit_void.pass.cpp
libcxx/test/std/thread/futures/futures.shared_future/get.pass.cpp
libcxx/test/std/thread/futures/futures.shared_future/wait.pass.cpp
libcxx/test/std/thread/futures/futures.shared_future/wait_for.pass.cpp
libcxx/test/std/thread/futures/futures.shared_future/wait_until.pass.cpp
libcxx/test/std/thread/futures/futures.task/futures.task.members/dtor.pass.cpp
libcxx/test/std/thread/futures/futures.task/futures.task.members/make_ready_at_thread_exit.pass.cpp
libcxx/test/std/thread/futures/futures.task/futures.task.members/operator.pass.cpp
libcxx/test/std/thread/futures/futures.unique_future/get.pass.cpp
libcxx/test/std/thread/futures/futures.unique_future/wait.pass.cpp
libcxx/test/std/thread/futures/futures.unique_future/wait_for.pass.cpp
libcxx/test/std/thread/futures/futures.unique_future/wait_until.pass.cpp
libcxx/test/std/thread/thread.barrier/arrive.pass.cpp
libcxx/test/std/thread/thread.barrier/arrive_and_drop.pass.cpp
libcxx/test/std/thread/thread.barrier/arrive_and_wait.pass.cpp
libcxx/test/std/thread/thread.barrier/completion.pass.cpp
libcxx/test/std/thread/thread.condition/notify_all_at_thread_exit.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvar/destructor.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_all.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_one.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_for.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_for_pred.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_pred.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_until.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_until_pred.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvarany/destructor.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvarany/notify_all.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvarany/notify_one.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_for.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_for_pred.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_pred.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_terminates.sh.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_until.pass.cpp
libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_until_pred.pass.cpp
libcxx/test/std/thread/thread.latch/arrive_and_wait.pass.cpp
libcxx/test/std/thread/thread.latch/count_down.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_duration.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_try_to_lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_duration.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_time_point.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_try_to_lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/try_lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/try_lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock_shared.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/try_lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/try_lock_shared.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock_shared.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_for.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_for.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_until.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until_deadlock_bug.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_for.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_until.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_for.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_until.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.once/thread.once.callonce/call_once.pass.cpp
libcxx/test/std/thread/thread.mutex/thread.once/thread.once.callonce/race.pass.cpp
libcxx/test/std/thread/thread.semaphore/acquire.pass.cpp
libcxx/test/std/thread/thread.semaphore/binary.pass.cpp
libcxx/test/std/thread/thread.semaphore/release.pass.cpp
libcxx/test/std/thread/thread.semaphore/timed.pass.cpp
libcxx/test/std/thread/thread.semaphore/try_acquire.pass.cpp
libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.algorithm/swap.pass.cpp
libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.assign/copy.compile.fail.cpp
libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.assign/move.pass.cpp
libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.assign/move2.pass.cpp
libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/constr.compile.fail.cpp
libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/copy.compile.fail.cpp
libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/move.pass.cpp
libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.destr/dtor.pass.cpp
libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/detach.pass.cpp
libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/get_id.pass.cpp
libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/join.pass.cpp
libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/joinable.pass.cpp
libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/swap.pass.cpp
libcxxabi/test/guard_threaded_test.pass.cpp
libcxxabi/test/test_guard.pass.cpp
libcxxabi/test/thread_local_destruction_order.pass.cpp
Removed:
################################################################################
diff --git a/libcxx/test/libcxx/utilities/memory/util.smartptr/race_condition.pass.cpp b/libcxx/test/libcxx/utilities/memory/util.smartptr/race_condition.pass.cpp
index 0f7096d5f17e..5ea05cd20d5e 100644
--- a/libcxx/test/libcxx/utilities/memory/util.smartptr/race_condition.pass.cpp
+++ b/libcxx/test/libcxx/utilities/memory/util.smartptr/race_condition.pass.cpp
@@ -20,6 +20,7 @@
#include <thread>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
typedef std::shared_ptr<int> Ptr;
@@ -51,7 +52,7 @@ void run_test(Ptr p) {
assert(p.use_count() == 2);
TestRunner r(p);
assert(p.use_count() == 3);
- std::thread t1(r); // Start the test thread.
+ std::thread t1 = support::make_test_thread(r); // Start the test thread.
assert(p.use_count() == 4);
Start = true;
// Run until we witness 25 use count changes via both
diff --git a/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.wait/atomic_wait.pass.cpp b/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.wait/atomic_wait.pass.cpp
index b5a345d7fbe2..32929bd4bc7d 100644
--- a/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.wait/atomic_wait.pass.cpp
+++ b/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.wait/atomic_wait.pass.cpp
@@ -27,6 +27,7 @@
#include <cassert>
#include <thread>
+#include "make_test_thread.h"
#include "test_macros.h"
#include "../atomics.types.operations.req/atomic_helpers.h"
@@ -39,23 +40,23 @@ struct TestFn {
std::atomic_init(&t, T(1));
assert(std::atomic_load(&t) == T(1));
std::atomic_wait(&t, T(0));
- std::thread t_([&](){
+ std::thread t1 = support::make_test_thread([&](){
std::atomic_store(&t, T(3));
std::atomic_notify_one(&t);
});
std::atomic_wait(&t, T(1));
- t_.join();
+ t1.join();
volatile A vt;
std::atomic_init(&vt, T(2));
assert(std::atomic_load(&vt) == T(2));
std::atomic_wait(&vt, T(1));
- std::thread t2_([&](){
+ std::thread t2 = support::make_test_thread([&](){
std::atomic_store(&vt, T(4));
std::atomic_notify_one(&vt);
});
std::atomic_wait(&vt, T(2));
- t2_.join();
+ t2.join();
}
};
diff --git a/libcxx/test/std/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp b/libcxx/test/std/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp
index 8c877531670c..ab666641d139 100644
--- a/libcxx/test/std/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp
@@ -19,6 +19,7 @@
#include <future>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
void func(std::promise<int> p)
@@ -32,7 +33,7 @@ int main(int, char**)
typedef int T;
std::promise<T> p;
std::future<T> f = p.get_future();
- std::thread(func, std::move(p)).detach();
+ support::make_test_thread(func, std::move(p)).detach();
try
{
f.get();
diff --git a/libcxx/test/std/thread/futures/futures.promise/set_lvalue_at_thread_exit.pass.cpp b/libcxx/test/std/thread/futures/futures.promise/set_lvalue_at_thread_exit.pass.cpp
index 1589493f3738..d3e1da2197a9 100644
--- a/libcxx/test/std/thread/futures/futures.promise/set_lvalue_at_thread_exit.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.promise/set_lvalue_at_thread_exit.pass.cpp
@@ -19,6 +19,7 @@
#include <memory>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
int i = 0;
@@ -34,7 +35,7 @@ int main(int, char**)
{
std::promise<int&> p;
std::future<int&> f = p.get_future();
- std::thread(func, std::move(p)).detach();
+ support::make_test_thread(func, std::move(p)).detach();
assert(f.get() == 4);
}
diff --git a/libcxx/test/std/thread/futures/futures.promise/set_rvalue_at_thread_exit.pass.cpp b/libcxx/test/std/thread/futures/futures.promise/set_rvalue_at_thread_exit.pass.cpp
index f0ac893b6de6..5a982eabab8d 100644
--- a/libcxx/test/std/thread/futures/futures.promise/set_rvalue_at_thread_exit.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.promise/set_rvalue_at_thread_exit.pass.cpp
@@ -18,6 +18,7 @@
#include <memory>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
void func(std::promise<std::unique_ptr<int>> p)
@@ -30,7 +31,7 @@ int main(int, char**)
{
std::promise<std::unique_ptr<int>> p;
std::future<std::unique_ptr<int>> f = p.get_future();
- std::thread(func, std::move(p)).detach();
+ support::make_test_thread(func, std::move(p)).detach();
assert(*f.get() == 5);
}
diff --git a/libcxx/test/std/thread/futures/futures.promise/set_value_at_thread_exit_const.pass.cpp b/libcxx/test/std/thread/futures/futures.promise/set_value_at_thread_exit_const.pass.cpp
index 55f7764e5206..da9b7a8d8d0d 100644
--- a/libcxx/test/std/thread/futures/futures.promise/set_value_at_thread_exit_const.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.promise/set_value_at_thread_exit_const.pass.cpp
@@ -18,6 +18,7 @@
#include <future>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
void func(std::promise<int> p)
@@ -31,7 +32,7 @@ int main(int, char**)
{
std::promise<int> p;
std::future<int> f = p.get_future();
- std::thread(func, std::move(p)).detach();
+ support::make_test_thread(func, std::move(p)).detach();
assert(f.get() == 5);
}
diff --git a/libcxx/test/std/thread/futures/futures.promise/set_value_at_thread_exit_void.pass.cpp b/libcxx/test/std/thread/futures/futures.promise/set_value_at_thread_exit_void.pass.cpp
index 0ba0d6094088..9786973c0c6c 100644
--- a/libcxx/test/std/thread/futures/futures.promise/set_value_at_thread_exit_void.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.promise/set_value_at_thread_exit_void.pass.cpp
@@ -19,6 +19,7 @@
#include <memory>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
int i = 0;
@@ -34,7 +35,7 @@ int main(int, char**)
{
std::promise<void> p;
std::future<void> f = p.get_future();
- std::thread(func, std::move(p)).detach();
+ support::make_test_thread(func, std::move(p)).detach();
f.get();
assert(i == 1);
}
diff --git a/libcxx/test/std/thread/futures/futures.shared_future/get.pass.cpp b/libcxx/test/std/thread/futures/futures.shared_future/get.pass.cpp
index 4b2c8979c939..61835df782cd 100644
--- a/libcxx/test/std/thread/futures/futures.shared_future/get.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.shared_future/get.pass.cpp
@@ -20,6 +20,7 @@
#include <future>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
void func1(std::promise<int> p)
@@ -68,7 +69,7 @@ int main(int, char**)
{
std::promise<T> p;
std::shared_future<T> f = p.get_future();
- std::thread(func1, std::move(p)).detach();
+ support::make_test_thread(func1, std::move(p)).detach();
assert(f.valid());
assert(f.get() == 3);
assert(f.valid());
@@ -77,7 +78,7 @@ int main(int, char**)
{
std::promise<T> p;
std::shared_future<T> f = p.get_future();
- std::thread(func2, std::move(p)).detach();
+ support::make_test_thread(func2, std::move(p)).detach();
try
{
assert(f.valid());
@@ -97,7 +98,7 @@ int main(int, char**)
{
std::promise<T> p;
std::shared_future<T> f = p.get_future();
- std::thread(func3, std::move(p)).detach();
+ support::make_test_thread(func3, std::move(p)).detach();
assert(f.valid());
assert(f.get() == 5);
assert(f.valid());
@@ -106,7 +107,7 @@ int main(int, char**)
{
std::promise<T> p;
std::shared_future<T> f = p.get_future();
- std::thread(func4, std::move(p)).detach();
+ support::make_test_thread(func4, std::move(p)).detach();
try
{
assert(f.valid());
@@ -126,7 +127,7 @@ int main(int, char**)
{
std::promise<T> p;
std::shared_future<T> f = p.get_future();
- std::thread(func5, std::move(p)).detach();
+ support::make_test_thread(func5, std::move(p)).detach();
assert(f.valid());
f.get();
assert(f.valid());
@@ -135,7 +136,7 @@ int main(int, char**)
{
std::promise<T> p;
std::shared_future<T> f = p.get_future();
- std::thread(func6, std::move(p)).detach();
+ support::make_test_thread(func6, std::move(p)).detach();
try
{
assert(f.valid());
diff --git a/libcxx/test/std/thread/futures/futures.shared_future/wait.pass.cpp b/libcxx/test/std/thread/futures/futures.shared_future/wait.pass.cpp
index 485d0050de62..4be8c1bd7015 100644
--- a/libcxx/test/std/thread/futures/futures.shared_future/wait.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.shared_future/wait.pass.cpp
@@ -18,6 +18,7 @@
#include <future>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
void func1(std::promise<int> p)
@@ -49,7 +50,7 @@ int main(int, char**)
typedef int T;
std::promise<T> p;
std::shared_future<T> f = p.get_future();
- std::thread(func1, std::move(p)).detach();
+ support::make_test_thread(func1, std::move(p)).detach();
assert(f.valid());
f.wait();
assert(f.valid());
@@ -63,7 +64,7 @@ int main(int, char**)
typedef int& T;
std::promise<T> p;
std::shared_future<T> f = p.get_future();
- std::thread(func3, std::move(p)).detach();
+ support::make_test_thread(func3, std::move(p)).detach();
assert(f.valid());
f.wait();
assert(f.valid());
@@ -77,7 +78,7 @@ int main(int, char**)
typedef void T;
std::promise<T> p;
std::shared_future<T> f = p.get_future();
- std::thread(func5, std::move(p)).detach();
+ support::make_test_thread(func5, std::move(p)).detach();
assert(f.valid());
f.wait();
assert(f.valid());
diff --git a/libcxx/test/std/thread/futures/futures.shared_future/wait_for.pass.cpp b/libcxx/test/std/thread/futures/futures.shared_future/wait_for.pass.cpp
index 8f58f1f46c86..d8b0ce3457bc 100644
--- a/libcxx/test/std/thread/futures/futures.shared_future/wait_for.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.shared_future/wait_for.pass.cpp
@@ -20,6 +20,7 @@
#include <future>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
typedef std::chrono::milliseconds ms;
@@ -56,7 +57,7 @@ int main(int, char**)
typedef int T;
std::promise<T> p;
std::shared_future<T> f = p.get_future();
- std::thread(func1, std::move(p)).detach();
+ support::make_test_thread(func1, std::move(p)).detach();
assert(f.valid());
assert(f.wait_for(ms(1)) == std::future_status::timeout);
assert(f.valid());
@@ -69,7 +70,7 @@ int main(int, char**)
typedef int& T;
std::promise<T> p;
std::shared_future<T> f = p.get_future();
- std::thread(func3, std::move(p)).detach();
+ support::make_test_thread(func3, std::move(p)).detach();
assert(f.valid());
assert(f.wait_for(ms(1)) == std::future_status::timeout);
assert(f.valid());
@@ -82,7 +83,7 @@ int main(int, char**)
typedef void T;
std::promise<T> p;
std::shared_future<T> f = p.get_future();
- std::thread(func5, std::move(p)).detach();
+ support::make_test_thread(func5, std::move(p)).detach();
assert(f.valid());
assert(f.wait_for(ms(1)) == std::future_status::timeout);
assert(f.valid());
@@ -97,7 +98,7 @@ int main(int, char**)
std::promise<T> p;
std::shared_future<T> f = p.get_future();
Clock::time_point t0 = Clock::now();
- std::thread(func1, std::move(p)).detach();
+ support::make_test_thread(func1, std::move(p)).detach();
assert(f.valid());
assert(f.wait_for(ms(1)) == std::future_status::timeout);
assert(f.valid());
@@ -113,7 +114,7 @@ int main(int, char**)
std::promise<T> p;
std::shared_future<T> f = p.get_future();
Clock::time_point t0 = Clock::now();
- std::thread(func3, std::move(p)).detach();
+ support::make_test_thread(func3, std::move(p)).detach();
assert(f.valid());
assert(f.wait_for(ms(1)) == std::future_status::timeout);
assert(f.valid());
@@ -129,7 +130,7 @@ int main(int, char**)
std::promise<T> p;
std::shared_future<T> f = p.get_future();
Clock::time_point t0 = Clock::now();
- std::thread(func5, std::move(p)).detach();
+ support::make_test_thread(func5, std::move(p)).detach();
assert(f.valid());
assert(f.wait_for(ms(1)) == std::future_status::timeout);
assert(f.valid());
diff --git a/libcxx/test/std/thread/futures/futures.shared_future/wait_until.pass.cpp b/libcxx/test/std/thread/futures/futures.shared_future/wait_until.pass.cpp
index a9e0dbdba538..1d58dc25f218 100644
--- a/libcxx/test/std/thread/futures/futures.shared_future/wait_until.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.shared_future/wait_until.pass.cpp
@@ -21,6 +21,7 @@
#include <atomic>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
enum class WorkerThreadState { Uninitialized, AllowedToRun, Exiting };
@@ -71,7 +72,7 @@ int main(int, char**)
typedef int T;
std::promise<T> p;
std::shared_future<T> f = p.get_future();
- std::thread(func1, std::move(p)).detach();
+ support::make_test_thread(func1, std::move(p)).detach();
assert(f.valid());
assert(f.wait_until(Clock::now() + ms(10)) == std::future_status::timeout);
assert(f.valid());
@@ -89,7 +90,7 @@ int main(int, char**)
typedef int& T;
std::promise<T> p;
std::shared_future<T> f = p.get_future();
- std::thread(func3, std::move(p)).detach();
+ support::make_test_thread(func3, std::move(p)).detach();
assert(f.valid());
assert(f.wait_until(Clock::now() + ms(10)) == std::future_status::timeout);
assert(f.valid());
@@ -107,7 +108,7 @@ int main(int, char**)
typedef void T;
std::promise<T> p;
std::shared_future<T> f = p.get_future();
- std::thread(func5, std::move(p)).detach();
+ support::make_test_thread(func5, std::move(p)).detach();
assert(f.valid());
assert(f.wait_until(Clock::now() + ms(10)) == std::future_status::timeout);
assert(f.valid());
diff --git a/libcxx/test/std/thread/futures/futures.task/futures.task.members/dtor.pass.cpp b/libcxx/test/std/thread/futures/futures.task/futures.task.members/dtor.pass.cpp
index 65bc94cf413a..d626f7424443 100644
--- a/libcxx/test/std/thread/futures/futures.task/futures.task.members/dtor.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.task/futures.task.members/dtor.pass.cpp
@@ -18,6 +18,7 @@
#include <future>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
class A
@@ -45,7 +46,7 @@ int main(int, char**)
{
std::packaged_task<double(int, char)> p(A(5));
std::future<double> f = p.get_future();
- std::thread(func, std::move(p)).detach();
+ support::make_test_thread(func, std::move(p)).detach();
try
{
double i = f.get();
@@ -61,7 +62,7 @@ int main(int, char**)
{
std::packaged_task<double(int, char)> p(A(5));
std::future<double> f = p.get_future();
- std::thread(func2, std::move(p)).detach();
+ support::make_test_thread(func2, std::move(p)).detach();
assert(f.get() == 105.0);
}
diff --git a/libcxx/test/std/thread/futures/futures.task/futures.task.members/make_ready_at_thread_exit.pass.cpp b/libcxx/test/std/thread/futures/futures.task/futures.task.members/make_ready_at_thread_exit.pass.cpp
index 571a1bf3684a..b42a632ace75 100644
--- a/libcxx/test/std/thread/futures/futures.task/futures.task.members/make_ready_at_thread_exit.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.task/futures.task.members/make_ready_at_thread_exit.pass.cpp
@@ -18,6 +18,7 @@
#include <future>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
class A
@@ -85,14 +86,14 @@ int main(int, char**)
{
std::packaged_task<double(int, char)> p(A(5));
std::future<double> f = p.get_future();
- std::thread(func0, std::move(p)).detach();
+ support::make_test_thread(func0, std::move(p)).detach();
assert(f.get() == 105.0);
}
#ifndef TEST_HAS_NO_EXCEPTIONS
{
std::packaged_task<double(int, char)> p(A(5));
std::future<double> f = p.get_future();
- std::thread(func1, std::move(p)).detach();
+ support::make_test_thread(func1, std::move(p)).detach();
try
{
f.get();
@@ -106,12 +107,12 @@ int main(int, char**)
{
std::packaged_task<double(int, char)> p(A(5));
std::future<double> f = p.get_future();
- std::thread(func2, std::move(p)).detach();
+ support::make_test_thread(func2, std::move(p)).detach();
assert(f.get() == 105.0);
}
{
std::packaged_task<double(int, char)> p;
- std::thread t(func3, std::move(p));
+ std::thread t = support::make_test_thread(func3, std::move(p));
t.join();
}
#endif
diff --git a/libcxx/test/std/thread/futures/futures.task/futures.task.members/operator.pass.cpp b/libcxx/test/std/thread/futures/futures.task/futures.task.members/operator.pass.cpp
index 5a9f2a6290be..886deb78cb8a 100644
--- a/libcxx/test/std/thread/futures/futures.task/futures.task.members/operator.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.task/futures.task.members/operator.pass.cpp
@@ -18,6 +18,7 @@
#include <future>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
class A
@@ -85,14 +86,14 @@ int main(int, char**)
{
std::packaged_task<double(int, char)> p(A(5));
std::future<double> f = p.get_future();
- std::thread(func0, std::move(p)).detach();
+ support::make_test_thread(func0, std::move(p)).detach();
assert(f.get() == 105.0);
}
#ifndef TEST_HAS_NO_EXCEPTIONS
{
std::packaged_task<double(int, char)> p(A(5));
std::future<double> f = p.get_future();
- std::thread(func1, std::move(p)).detach();
+ support::make_test_thread(func1, std::move(p)).detach();
try
{
f.get();
@@ -106,13 +107,13 @@ int main(int, char**)
{
std::packaged_task<double(int, char)> p(A(5));
std::future<double> f = p.get_future();
- std::thread t(func2, std::move(p));
+ std::thread t = support::make_test_thread(func2, std::move(p));
assert(f.get() == 105.0);
t.join();
}
{
std::packaged_task<double(int, char)> p;
- std::thread t(func3, std::move(p));
+ std::thread t = support::make_test_thread(func3, std::move(p));
t.join();
}
#endif
diff --git a/libcxx/test/std/thread/futures/futures.unique_future/get.pass.cpp b/libcxx/test/std/thread/futures/futures.unique_future/get.pass.cpp
index cb188fa908bc..3262a2b7ce57 100644
--- a/libcxx/test/std/thread/futures/futures.unique_future/get.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.unique_future/get.pass.cpp
@@ -20,6 +20,7 @@
#include <future>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
void func1(std::promise<int> p)
@@ -68,7 +69,7 @@ int main(int, char**)
{
std::promise<T> p;
std::future<T> f = p.get_future();
- std::thread(func1, std::move(p)).detach();
+ support::make_test_thread(func1, std::move(p)).detach();
assert(f.valid());
assert(f.get() == 3);
assert(!f.valid());
@@ -77,7 +78,7 @@ int main(int, char**)
{
std::promise<T> p;
std::future<T> f = p.get_future();
- std::thread(func2, std::move(p)).detach();
+ support::make_test_thread(func2, std::move(p)).detach();
try
{
assert(f.valid());
@@ -97,7 +98,7 @@ int main(int, char**)
{
std::promise<T> p;
std::future<T> f = p.get_future();
- std::thread(func3, std::move(p)).detach();
+ support::make_test_thread(func3, std::move(p)).detach();
assert(f.valid());
assert(f.get() == 5);
assert(!f.valid());
@@ -106,7 +107,7 @@ int main(int, char**)
{
std::promise<T> p;
std::future<T> f = p.get_future();
- std::thread(func4, std::move(p)).detach();
+ support::make_test_thread(func4, std::move(p)).detach();
try
{
assert(f.valid());
@@ -126,7 +127,7 @@ int main(int, char**)
{
std::promise<T> p;
std::future<T> f = p.get_future();
- std::thread(func5, std::move(p)).detach();
+ support::make_test_thread(func5, std::move(p)).detach();
assert(f.valid());
f.get();
assert(!f.valid());
@@ -135,7 +136,7 @@ int main(int, char**)
{
std::promise<T> p;
std::future<T> f = p.get_future();
- std::thread(func6, std::move(p)).detach();
+ support::make_test_thread(func6, std::move(p)).detach();
try
{
assert(f.valid());
diff --git a/libcxx/test/std/thread/futures/futures.unique_future/wait.pass.cpp b/libcxx/test/std/thread/futures/futures.unique_future/wait.pass.cpp
index ee550545fbbc..712ee3b9b4a1 100644
--- a/libcxx/test/std/thread/futures/futures.unique_future/wait.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.unique_future/wait.pass.cpp
@@ -18,6 +18,7 @@
#include <future>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
void func1(std::promise<int> p)
@@ -48,7 +49,7 @@ void test(F func) {
std::promise<T> p;
std::future<T> f = p.get_future();
- std::thread(func, std::move(p)).detach();
+ support::make_test_thread(func, std::move(p)).detach();
assert(f.valid());
f.wait();
assert(f.valid());
diff --git a/libcxx/test/std/thread/futures/futures.unique_future/wait_for.pass.cpp b/libcxx/test/std/thread/futures/futures.unique_future/wait_for.pass.cpp
index 9ba4cd262ea8..2a04ade2592e 100644
--- a/libcxx/test/std/thread/futures/futures.unique_future/wait_for.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.unique_future/wait_for.pass.cpp
@@ -20,6 +20,7 @@
#include <future>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
typedef std::chrono::milliseconds ms;
@@ -54,7 +55,7 @@ void test(F func, bool waitFirst) {
std::promise<T> p;
std::future<T> f = p.get_future();
Clock::time_point t1, t0 = Clock::now();
- std::thread(func, std::move(p)).detach();
+ support::make_test_thread(func, std::move(p)).detach();
assert(f.valid());
assert(f.wait_for(ms(1)) == std::future_status::timeout);
assert(f.valid());
diff --git a/libcxx/test/std/thread/futures/futures.unique_future/wait_until.pass.cpp b/libcxx/test/std/thread/futures/futures.unique_future/wait_until.pass.cpp
index 058102812811..e5171e5f9f1f 100644
--- a/libcxx/test/std/thread/futures/futures.unique_future/wait_until.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.unique_future/wait_until.pass.cpp
@@ -21,6 +21,7 @@
#include <atomic>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
enum class WorkerThreadState { Uninitialized, AllowedToRun, Exiting };
@@ -70,7 +71,7 @@ int main(int, char**)
typedef int T;
std::promise<T> p;
std::future<T> f = p.get_future();
- std::thread(func1, std::move(p)).detach();
+ support::make_test_thread(func1, std::move(p)).detach();
assert(f.valid());
assert(f.wait_until(Clock::now() + ms(10)) == std::future_status::timeout);
assert(f.valid());
@@ -88,7 +89,7 @@ int main(int, char**)
typedef int& T;
std::promise<T> p;
std::future<T> f = p.get_future();
- std::thread(func3, std::move(p)).detach();
+ support::make_test_thread(func3, std::move(p)).detach();
assert(f.valid());
assert(f.wait_until(Clock::now() + ms(10)) == std::future_status::timeout);
assert(f.valid());
@@ -106,7 +107,7 @@ int main(int, char**)
typedef void T;
std::promise<T> p;
std::future<T> f = p.get_future();
- std::thread(func5, std::move(p)).detach();
+ support::make_test_thread(func5, std::move(p)).detach();
assert(f.valid());
assert(f.wait_until(Clock::now() + ms(10)) == std::future_status::timeout);
assert(f.valid());
diff --git a/libcxx/test/std/thread/thread.barrier/arrive.pass.cpp b/libcxx/test/std/thread/thread.barrier/arrive.pass.cpp
index 59a219797a53..c4956b611c68 100644
--- a/libcxx/test/std/thread/thread.barrier/arrive.pass.cpp
+++ b/libcxx/test/std/thread/thread.barrier/arrive.pass.cpp
@@ -25,6 +25,7 @@
#include <barrier>
#include <thread>
+#include "make_test_thread.h"
#include "test_macros.h"
int main(int, char**)
@@ -32,7 +33,7 @@ int main(int, char**)
std::barrier<> b(2);
auto tok = b.arrive();
- std::thread t([&](){
+ std::thread t = support::make_test_thread([&](){
(void)b.arrive();
});
b.wait(std::move(tok));
diff --git a/libcxx/test/std/thread/thread.barrier/arrive_and_drop.pass.cpp b/libcxx/test/std/thread/thread.barrier/arrive_and_drop.pass.cpp
index 00f8dfa97b98..b8bcbc993bd4 100644
--- a/libcxx/test/std/thread/thread.barrier/arrive_and_drop.pass.cpp
+++ b/libcxx/test/std/thread/thread.barrier/arrive_and_drop.pass.cpp
@@ -26,13 +26,14 @@
#include <thread>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
int main(int, char**)
{
std::barrier<> b(2);
- std::thread t([&](){
+ std::thread t = support::make_test_thread([&](){
b.arrive_and_drop();
});
diff --git a/libcxx/test/std/thread/thread.barrier/arrive_and_wait.pass.cpp b/libcxx/test/std/thread/thread.barrier/arrive_and_wait.pass.cpp
index b3da00eb6e34..8fc546934733 100644
--- a/libcxx/test/std/thread/thread.barrier/arrive_and_wait.pass.cpp
+++ b/libcxx/test/std/thread/thread.barrier/arrive_and_wait.pass.cpp
@@ -25,13 +25,14 @@
#include <barrier>
#include <thread>
+#include "make_test_thread.h"
#include "test_macros.h"
int main(int, char**)
{
std::barrier<> b(2);
- std::thread t([&](){
+ std::thread t = support::make_test_thread([&](){
for(int i = 0; i < 10; ++i)
b.arrive_and_wait();
});
diff --git a/libcxx/test/std/thread/thread.barrier/completion.pass.cpp b/libcxx/test/std/thread/thread.barrier/completion.pass.cpp
index 7d4e8119790d..d9200729d97e 100644
--- a/libcxx/test/std/thread/thread.barrier/completion.pass.cpp
+++ b/libcxx/test/std/thread/thread.barrier/completion.pass.cpp
@@ -26,6 +26,7 @@
#include <thread>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
int main(int, char**)
@@ -34,7 +35,7 @@ int main(int, char**)
auto comp = [&]() { x += 1; };
std::barrier<decltype(comp)> b(2, comp);
- std::thread t([&](){
+ std::thread t = support::make_test_thread([&](){
for(int i = 0; i < 10; ++i)
b.arrive_and_wait();
});
diff --git a/libcxx/test/std/thread/thread.condition/notify_all_at_thread_exit.pass.cpp b/libcxx/test/std/thread/thread.condition/notify_all_at_thread_exit.pass.cpp
index 8ef869b66a96..48a077455b36 100644
--- a/libcxx/test/std/thread/thread.condition/notify_all_at_thread_exit.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/notify_all_at_thread_exit.pass.cpp
@@ -23,6 +23,7 @@
#include <chrono>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::condition_variable cv;
@@ -41,7 +42,7 @@ void func()
int main(int, char**)
{
std::unique_lock<std::mutex> lk(mut);
- std::thread t(func);
+ std::thread t = support::make_test_thread(func);
Clock::time_point t0 = Clock::now();
cv.wait(lk);
Clock::time_point t1 = Clock::now();
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/destructor.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/destructor.pass.cpp
index 1c4eeb94d01b..6f2d6b97fb70 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/destructor.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/destructor.pass.cpp
@@ -19,6 +19,7 @@
#include <thread>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::condition_variable* cv;
@@ -48,12 +49,12 @@ void g()
int main(int, char**)
{
cv = new std::condition_variable;
- std::thread th2(g);
+ std::thread th2 = support::make_test_thread(g);
Lock lk(m);
while (!g_ready)
cv->wait(lk);
lk.unlock();
- std::thread th1(f);
+ std::thread th1 = support::make_test_thread(f);
th1.join();
th2.join();
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_all.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_all.pass.cpp
index f0f614d1c24e..b095cd06e4e4 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_all.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_all.pass.cpp
@@ -19,6 +19,7 @@
#include <thread>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::condition_variable cv;
@@ -50,8 +51,8 @@ void f2()
int main(int, char**)
{
- std::thread t1(f1);
- std::thread t2(f2);
+ std::thread t1 = support::make_test_thread(f1);
+ std::thread t2 = support::make_test_thread(f2);
std::this_thread::sleep_for(std::chrono::milliseconds(100));
{
std::unique_lock<std::mutex>lk(mut);
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_one.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_one.pass.cpp
index b37305056517..821fbdda5b62 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_one.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_one.pass.cpp
@@ -41,6 +41,7 @@
#include <thread>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
@@ -78,8 +79,8 @@ void f2()
int main(int, char**)
{
- std::thread t1(f1);
- std::thread t2(f2);
+ std::thread t1 = support::make_test_thread(f1);
+ std::thread t2 = support::make_test_thread(f2);
{
while (ready > 0)
std::this_thread::yield();
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait.pass.cpp
index e89bb313b47c..a2dc4466f0d6 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait.pass.cpp
@@ -19,6 +19,7 @@
#include <thread>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::condition_variable cv;
@@ -40,8 +41,8 @@ void f()
int main(int, char**)
{
- std::unique_lock<std::mutex>lk(mut);
- std::thread t(f);
+ std::unique_lock<std::mutex> lk(mut);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_for.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_for.pass.cpp
index 3bead1b6ff89..a58e15f7b009 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_for.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_for.pass.cpp
@@ -25,6 +25,7 @@
#include <chrono>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::condition_variable cv;
@@ -64,8 +65,8 @@ void f()
int main(int, char**)
{
{
- std::unique_lock<std::mutex>lk(mut);
- std::thread t(f);
+ std::unique_lock<std::mutex> lk(mut);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
@@ -78,8 +79,8 @@ int main(int, char**)
test1 = 0;
test2 = 0;
{
- std::unique_lock<std::mutex>lk(mut);
- std::thread t(f);
+ std::unique_lock<std::mutex> lk(mut);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_for_pred.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_for_pred.pass.cpp
index f3322b9b7c04..d6a1bb922408 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_for_pred.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_for_pred.pass.cpp
@@ -24,6 +24,7 @@
#include <chrono>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
class Pred
@@ -72,7 +73,7 @@ int main(int, char**)
{
{
std::unique_lock<std::mutex>lk(mut);
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
@@ -86,7 +87,7 @@ int main(int, char**)
test2 = 0;
{
std::unique_lock<std::mutex>lk(mut);
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_pred.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_pred.pass.cpp
index c4034fc2b215..041333e2b633 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_pred.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_pred.pass.cpp
@@ -21,6 +21,7 @@
#include <functional>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::condition_variable cv;
@@ -51,7 +52,7 @@ void f()
int main(int, char**)
{
std::unique_lock<std::mutex>lk(mut);
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_until.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_until.pass.cpp
index e5c77f28eb84..c41bc5ce9132 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_until.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_until.pass.cpp
@@ -23,6 +23,7 @@
#include <chrono>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
struct TestClock
@@ -83,7 +84,7 @@ void run_test()
test2 = 0;
{
std::unique_lock<std::mutex>lk(mut);
- std::thread t(f<Clock>);
+ std::thread t = support::make_test_thread(f<Clock>);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
@@ -97,7 +98,7 @@ void run_test()
test2 = 0;
{
std::unique_lock<std::mutex>lk(mut);
- std::thread t(f<Clock>);
+ std::thread t = support::make_test_thread(f<Clock>);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_until_pred.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_until_pred.pass.cpp
index ab43bdb1a02a..23b42daaac54 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_until_pred.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/wait_until_pred.pass.cpp
@@ -26,6 +26,7 @@
#include <chrono>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
struct Clock
@@ -90,8 +91,8 @@ void f()
int main(int, char**)
{
{
- std::unique_lock<std::mutex>lk(mut);
- std::thread t(f);
+ std::unique_lock<std::mutex> lk(mut);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
@@ -104,8 +105,8 @@ int main(int, char**)
test1 = 0;
test2 = 0;
{
- std::unique_lock<std::mutex>lk(mut);
- std::thread t(f);
+ std::unique_lock<std::mutex> lk(mut);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/destructor.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/destructor.pass.cpp
index 4b9d719ec5d7..7ac99550b11c 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/destructor.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/destructor.pass.cpp
@@ -19,6 +19,7 @@
#include <thread>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::condition_variable_any* cv;
@@ -49,12 +50,12 @@ void g()
int main(int, char**)
{
cv = new std::condition_variable_any;
- std::thread th2(g);
+ std::thread th2 = support::make_test_thread(g);
m.lock();
while (!g_ready)
cv->wait(m);
m.unlock();
- std::thread th1(f);
+ std::thread th1 = support::make_test_thread(f);
th1.join();
th2.join();
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/notify_all.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/notify_all.pass.cpp
index 36428bc7fc50..05825ea26c94 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/notify_all.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/notify_all.pass.cpp
@@ -21,6 +21,7 @@
#include <atomic>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::condition_variable_any cv;
@@ -46,7 +47,7 @@ int main(int, char**)
notReady = threadCount;
std::vector<std::thread> threads(threadCount);
for (unsigned i = 0; i < threadCount; i++)
- threads[i] = std::thread(helper);
+ threads[i] = support::make_test_thread(helper);
{
while (notReady > 0)
std::this_thread::yield();
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/notify_one.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/notify_one.pass.cpp
index 60a7dd7f10f7..66ce0fefd553 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/notify_one.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/notify_one.pass.cpp
@@ -21,6 +21,7 @@
#include <thread>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::condition_variable_any cv;
@@ -56,8 +57,8 @@ void f2()
int main(int, char**)
{
- std::thread t1(f1);
- std::thread t2(f2);
+ std::thread t1 = support::make_test_thread(f1);
+ std::thread t2 = support::make_test_thread(f2);
std::this_thread::sleep_for(std::chrono::milliseconds(100));
{
L1 lk(m0);
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait.pass.cpp
index 291fcad827d9..a29fd9d7bd7c 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait.pass.cpp
@@ -20,6 +20,7 @@
#include <thread>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::condition_variable_any cv;
@@ -46,7 +47,7 @@ void f()
int main(int, char**)
{
L1 lk(m0);
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_for.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_for.pass.cpp
index d89d54ace951..26535e8a07e1 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_for.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_for.pass.cpp
@@ -24,6 +24,7 @@
#include <chrono>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::condition_variable_any cv;
@@ -68,7 +69,7 @@ int main(int, char**)
{
{
L1 lk(m0);
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
@@ -82,7 +83,7 @@ int main(int, char**)
test2 = 0;
{
L1 lk(m0);
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_for_pred.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_for_pred.pass.cpp
index 7b91efaa950b..75d709d36af8 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_for_pred.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_for_pred.pass.cpp
@@ -23,6 +23,7 @@
#include <chrono>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
class Pred
@@ -77,7 +78,7 @@ int main(int, char**)
{
expect_result = true;
L1 lk(m0);
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
@@ -92,7 +93,7 @@ int main(int, char**)
{
expect_result = false;
L1 lk(m0);
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_pred.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_pred.pass.cpp
index 41bcd80794ed..d32848e3087c 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_pred.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_pred.pass.cpp
@@ -21,6 +21,7 @@
#include <functional>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::condition_variable_any cv;
@@ -55,7 +56,7 @@ void f()
int main(int, char**)
{
L1 lk(m0);
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_terminates.sh.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_terminates.sh.cpp
index f4bb2b71bc79..c507917b5317 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_terminates.sh.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_terminates.sh.cpp
@@ -63,6 +63,8 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
+
void my_terminate() {
std::_Exit(0); // Use _Exit to prevent cleanup from taking place.
}
@@ -118,7 +120,7 @@ int main(int argc, char **argv) {
try {
mut.lock();
assert(pred == false);
- std::thread(signal_me).detach();
+ support::make_test_thread(signal_me).detach();
switch (id) {
case 1: cv.wait(mut); break;
case 2: cv.wait(mut, pred_function); break;
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_until.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_until.pass.cpp
index de48880c7683..8054f0248e8c 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_until.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_until.pass.cpp
@@ -22,6 +22,7 @@
#include <chrono>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
struct Clock
@@ -81,7 +82,7 @@ int main(int, char**)
{
{
L1 lk(m0);
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
@@ -95,7 +96,7 @@ int main(int, char**)
test2 = 0;
{
L1 lk(m0);
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_until_pred.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_until_pred.pass.cpp
index 1c3e5814d093..74d18d0d7e0c 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_until_pred.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvarany/wait_until_pred.pass.cpp
@@ -26,6 +26,7 @@
#include <chrono>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
struct Clock
@@ -95,7 +96,7 @@ int main(int, char**)
{
{
L1 lk(m0);
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
@@ -109,7 +110,7 @@ int main(int, char**)
test2 = 0;
{
L1 lk(m0);
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
assert(test1 == 0);
while (test1 == 0)
cv.wait(lk);
diff --git a/libcxx/test/std/thread/thread.latch/arrive_and_wait.pass.cpp b/libcxx/test/std/thread/thread.latch/arrive_and_wait.pass.cpp
index c4c4b2ea0432..b11d46bbffd9 100644
--- a/libcxx/test/std/thread/thread.latch/arrive_and_wait.pass.cpp
+++ b/libcxx/test/std/thread/thread.latch/arrive_and_wait.pass.cpp
@@ -25,13 +25,14 @@
#include <latch>
#include <thread>
+#include "make_test_thread.h"
#include "test_macros.h"
int main(int, char**)
{
std::latch l(2);
- std::thread t([&](){
+ std::thread t = support::make_test_thread([&](){
l.arrive_and_wait();
});
l.arrive_and_wait();
diff --git a/libcxx/test/std/thread/thread.latch/count_down.pass.cpp b/libcxx/test/std/thread/thread.latch/count_down.pass.cpp
index 336b32102cd2..9043dc145599 100644
--- a/libcxx/test/std/thread/thread.latch/count_down.pass.cpp
+++ b/libcxx/test/std/thread/thread.latch/count_down.pass.cpp
@@ -25,6 +25,7 @@
#include <latch>
#include <thread>
+#include "make_test_thread.h"
#include "test_macros.h"
int main(int, char**)
@@ -32,7 +33,7 @@ int main(int, char**)
std::latch l(2);
l.count_down();
- std::thread t([&](){
+ std::thread t = support::make_test_thread([&](){
l.count_down();
});
l.wait();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex.pass.cpp
index cfffafdce822..3e3560c7e983 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex.pass.cpp
@@ -31,6 +31,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
typedef std::chrono::system_clock Clock;
@@ -82,7 +83,7 @@ int main(int, char**)
{
m.lock();
for (int i = 0; i < 5; ++i)
- v.push_back(std::thread(f));
+ v.push_back(support::make_test_thread(f));
std::this_thread::sleep_for(WaitTime);
m.unlock();
for (auto& t : v)
@@ -91,8 +92,8 @@ int main(int, char**)
{
m.lock_shared();
for (auto& t : v)
- t = std::thread(g);
- std::thread q(f);
+ t = support::make_test_thread(g);
+ std::thread q = support::make_test_thread(f);
std::this_thread::sleep_for(WaitTime);
m.unlock_shared();
for (auto& t : v)
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_duration.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_duration.pass.cpp
index 31643071f1fd..811f4727c9bb 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_duration.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_duration.pass.cpp
@@ -27,6 +27,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_timed_mutex m;
@@ -75,7 +76,7 @@ int main(int, char**)
m.lock();
std::vector<std::thread> v;
for (unsigned i = 0; i < Threads; ++i)
- v.push_back(std::thread(f1));
+ v.push_back(support::make_test_thread(f1));
while (CountDown > 0)
std::this_thread::yield();
// Give one more chance for threads to block and wait for the mutex.
@@ -89,7 +90,7 @@ int main(int, char**)
m.lock();
std::vector<std::thread> v;
for (unsigned i = 0; i < Threads; ++i)
- v.push_back(std::thread(f2));
+ v.push_back(support::make_test_thread(f2));
for (auto& t : v)
t.join();
m.unlock();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp
index f0081c2c2dd8..eb31b2572287 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp
@@ -27,6 +27,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_timed_mutex m;
@@ -69,7 +70,7 @@ int main(int, char**)
m.lock();
std::vector<std::thread> v;
for (unsigned i = 0; i < Threads; ++i)
- v.push_back(std::thread(f1));
+ v.push_back(support::make_test_thread(f1));
while (CountDown > 0)
std::this_thread::yield();
std::this_thread::sleep_for(ShortTime);
@@ -81,7 +82,7 @@ int main(int, char**)
m.lock();
std::vector<std::thread> v;
for (unsigned i = 0; i < Threads; ++i)
- v.push_back(std::thread(f2));
+ v.push_back(support::make_test_thread(f2));
for (auto& t : v)
t.join();
m.unlock();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_try_to_lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_try_to_lock.pass.cpp
index d13eeb860fc3..c12a54828168 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_try_to_lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_try_to_lock.pass.cpp
@@ -28,6 +28,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_timed_mutex m;
@@ -69,7 +70,7 @@ int main(int, char**)
m.lock();
std::vector<std::thread> v;
for (int i = 0; i < 5; ++i)
- v.push_back(std::thread(f));
+ v.push_back(support::make_test_thread(f));
std::this_thread::sleep_for(ms(250));
m.unlock();
for (auto& t : v)
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock.pass.cpp
index 6db3a44c71f5..591b828a2b38 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock.pass.cpp
@@ -28,6 +28,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_timed_mutex m;
@@ -90,7 +91,7 @@ int main(int, char**)
m.lock();
std::vector<std::thread> v;
for (int i = 0; i < 5; ++i)
- v.push_back(std::thread(f));
+ v.push_back(support::make_test_thread(f));
std::this_thread::sleep_for(WaitTime);
m.unlock();
for (auto& t : v)
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex.pass.cpp
index c9e0c671fb74..bd25d02cfe10 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex.pass.cpp
@@ -24,6 +24,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::mutex m;
@@ -49,7 +50,7 @@ void f()
int main(int, char**)
{
m.lock();
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_duration.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_duration.pass.cpp
index fdc3c8b065b5..1f4e03299417 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_duration.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_duration.pass.cpp
@@ -22,6 +22,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::timed_mutex m;
@@ -56,14 +57,14 @@ int main(int, char**)
{
{
m.lock();
- std::thread t(f1);
+ std::thread t = support::make_test_thread(f1);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
}
{
m.lock();
- std::thread t(f2);
+ std::thread t = support::make_test_thread(f2);
std::this_thread::sleep_for(ms(300));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_time_point.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_time_point.pass.cpp
index 2bac8784dbfb..5231c593fd3c 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_time_point.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_time_point.pass.cpp
@@ -22,6 +22,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::timed_mutex m;
@@ -56,14 +57,14 @@ int main(int, char**)
{
{
m.lock();
- std::thread t(f1);
+ std::thread t = support::make_test_thread(f1);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
}
{
m.lock();
- std::thread t(f2);
+ std::thread t = support::make_test_thread(f2);
std::this_thread::sleep_for(ms(300));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_try_to_lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_try_to_lock.pass.cpp
index 7aaf5a2955a4..1ebbb6b7e7ea 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_try_to_lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_try_to_lock.pass.cpp
@@ -20,6 +20,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::mutex m;
@@ -59,7 +60,7 @@ void f()
int main(int, char**)
{
m.lock();
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/lock.pass.cpp
index b5425a79de36..26f82520a89d 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/lock.pass.cpp
@@ -21,6 +21,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::mutex m;
@@ -69,7 +70,7 @@ void f()
int main(int, char**)
{
m.lock();
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/lock.pass.cpp
index 3c2d15dfd5b8..f375b6fb7d17 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/lock.pass.cpp
@@ -21,6 +21,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::mutex m;
@@ -44,7 +45,7 @@ void f()
int main(int, char**)
{
m.lock();
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/try_lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/try_lock.pass.cpp
index 5a6715c0c5c4..dc9d6c3ef6d9 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/try_lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/try_lock.pass.cpp
@@ -21,6 +21,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::mutex m;
@@ -48,7 +49,7 @@ void f()
int main(int, char**)
{
m.lock();
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/lock.pass.cpp
index 2225432aa367..1ce9a4cde192 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/lock.pass.cpp
@@ -20,6 +20,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::recursive_mutex m;
@@ -45,7 +46,7 @@ void f()
int main(int, char**)
{
m.lock();
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/try_lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/try_lock.pass.cpp
index c0ab6ff5c5c5..60a4da786470 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/try_lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/try_lock.pass.cpp
@@ -21,6 +21,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::recursive_mutex m;
@@ -50,7 +51,7 @@ void f()
int main(int, char**)
{
m.lock();
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock.pass.cpp
index aed7f6516f11..82715ace50ad 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock.pass.cpp
@@ -27,6 +27,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_mutex m;
@@ -61,7 +62,7 @@ void f()
int main(int, char**)
{
m.lock();
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
std::this_thread::sleep_for(WaitTime);
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock_shared.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock_shared.pass.cpp
index c2e7fd9bcb38..6c69c2eaa48f 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock_shared.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock_shared.pass.cpp
@@ -28,6 +28,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_mutex m;
@@ -75,15 +76,15 @@ int main(int, char**)
m.lock();
std::vector<std::thread> v;
for (int i = 0; i < 5; ++i)
- v.push_back(std::thread(f));
+ v.push_back(support::make_test_thread(f));
std::this_thread::sleep_for(WaitTime);
m.unlock();
for (auto& t : v)
t.join();
m.lock_shared();
for (auto& t : v)
- t = std::thread(g);
- std::thread q(f);
+ t = support::make_test_thread(g);
+ std::thread q = support::make_test_thread(f);
std::this_thread::sleep_for(WaitTime);
m.unlock_shared();
for (auto& t : v)
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/try_lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/try_lock.pass.cpp
index 9c9f09fd799f..6f39ae442e04 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/try_lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/try_lock.pass.cpp
@@ -27,6 +27,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_mutex m;
@@ -54,7 +55,7 @@ void f()
int main(int, char**)
{
m.lock();
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/try_lock_shared.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/try_lock_shared.pass.cpp
index c4e18ebb1552..fda9485d659a 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/try_lock_shared.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/try_lock_shared.pass.cpp
@@ -28,6 +28,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_mutex m;
@@ -58,7 +59,7 @@ int main(int, char**)
m.lock();
std::vector<std::thread> v;
for (int i = 0; i < 5; ++i)
- v.push_back(std::thread(f));
+ v.push_back(support::make_test_thread(f));
std::this_thread::sleep_for(ms(250));
m.unlock();
for (auto& t : v)
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock.pass.cpp
index e17547228f44..2b05c8c7f7d3 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock.pass.cpp
@@ -25,6 +25,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_timed_mutex m;
@@ -54,7 +55,7 @@ void f()
int main(int, char**)
{
m.lock();
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
while (!ready)
std::this_thread::yield();
start = Clock::now();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock_shared.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock_shared.pass.cpp
index 5b711708abf5..0d77585a12d5 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock_shared.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock_shared.pass.cpp
@@ -26,6 +26,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_timed_mutex m;
@@ -76,7 +77,7 @@ int main(int, char**)
m.lock();
std::vector<std::thread> v;
for (int i = 0; i < threads; ++i)
- v.push_back(std::thread(readerMustWait));
+ v.push_back(support::make_test_thread(readerMustWait));
while (countDown > 0)
std::this_thread::yield();
readerStart = Clock::now();
@@ -88,8 +89,8 @@ int main(int, char**)
countDown.store(threads + 1);
m.lock_shared();
for (auto& t : v)
- t = std::thread(reader);
- std::thread q(writerMustWait);
+ t = support::make_test_thread(reader);
+ std::thread q = support::make_test_thread(writerMustWait);
while (countDown > 0)
std::this_thread::yield();
writerStart = Clock::now();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock.pass.cpp
index 910f92fdc9f4..97fef9b67d8e 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock.pass.cpp
@@ -27,6 +27,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_timed_mutex m;
@@ -54,7 +55,7 @@ void f()
int main(int, char**)
{
m.lock();
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_for.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_for.pass.cpp
index 40b840128859..c981f075f604 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_for.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_for.pass.cpp
@@ -28,6 +28,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_timed_mutex m;
@@ -73,14 +74,14 @@ int main(int, char**)
{
{
m.lock();
- std::thread t(f1);
+ std::thread t = support::make_test_thread(f1);
std::this_thread::sleep_for(WaitTime);
m.unlock();
t.join();
}
{
m.lock();
- std::thread t(f2);
+ std::thread t = support::make_test_thread(f2);
std::this_thread::sleep_for(WaitTime + Tolerance);
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared.pass.cpp
index 24aee00a0723..adef56ca3757 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared.pass.cpp
@@ -28,6 +28,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_timed_mutex m;
@@ -64,7 +65,7 @@ int main(int, char**)
m.lock();
std::vector<std::thread> v;
for (int i = 0; i < 5; ++i)
- v.push_back(std::thread(f));
+ v.push_back(support::make_test_thread(f));
std::this_thread::sleep_for(ms(250));
m.unlock();
for (auto& t : v)
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_for.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_for.pass.cpp
index 77ef92663288..06966c33c7cf 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_for.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_for.pass.cpp
@@ -29,6 +29,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_timed_mutex m;
@@ -75,7 +76,7 @@ int main(int, char**)
m.lock();
std::vector<std::thread> v;
for (int i = 0; i < 5; ++i)
- v.push_back(std::thread(f1));
+ v.push_back(support::make_test_thread(f1));
std::this_thread::sleep_for(WaitTime);
m.unlock();
for (auto& t : v)
@@ -85,7 +86,7 @@ int main(int, char**)
m.lock();
std::vector<std::thread> v;
for (int i = 0; i < 5; ++i)
- v.push_back(std::thread(f2));
+ v.push_back(support::make_test_thread(f2));
std::this_thread::sleep_for(WaitTime + Tolerance);
m.unlock();
for (auto& t : v)
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_until.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_until.pass.cpp
index a9513c83cf1f..a80fb7405c72 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_until.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_until.pass.cpp
@@ -29,6 +29,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_timed_mutex m;
@@ -72,7 +73,7 @@ int main(int, char**)
m.lock();
std::vector<std::thread> v;
for (int i = 0; i < threads; ++i)
- v.push_back(std::thread(f1));
+ v.push_back(support::make_test_thread(f1));
while (countDown > 0)
std::this_thread::yield();
m.unlock();
@@ -83,7 +84,7 @@ int main(int, char**)
m.lock();
std::vector<std::thread> v;
for (int i = 0; i < threads; ++i)
- v.push_back(std::thread(f2));
+ v.push_back(support::make_test_thread(f2));
for (auto& t : v)
t.join();
m.unlock();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until.pass.cpp
index edf826827c04..4413a2218e0c 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until.pass.cpp
@@ -28,6 +28,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_timed_mutex m;
@@ -73,14 +74,14 @@ int main(int, char**)
{
{
m.lock();
- std::thread t(f1);
+ std::thread t = support::make_test_thread(f1);
std::this_thread::sleep_for(WaitTime);
m.unlock();
t.join();
}
{
m.lock();
- std::thread t(f2);
+ std::thread t = support::make_test_thread(f2);
std::this_thread::sleep_for(WaitTime + Tolerance);
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until_deadlock_bug.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until_deadlock_bug.pass.cpp
index e99bb9720ddb..7300dad7d5a2 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until_deadlock_bug.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until_deadlock_bug.pass.cpp
@@ -26,6 +26,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::shared_timed_mutex m;
@@ -59,10 +60,10 @@ int main(int, char**)
typedef std::chrono::steady_clock Clock;
m.lock_shared();
- std::thread t1(writer_one);
+ std::thread t1 = support::make_test_thread(writer_one);
// create some readers
- std::thread t2(blocked_reader);
- std::thread t3(blocked_reader);
+ std::thread t2 = support::make_test_thread(blocked_reader);
+ std::thread t3 = support::make_test_thread(blocked_reader);
// Kill the test after 10 seconds if it hasn't completed.
auto end_point = Clock::now() + std::chrono::seconds(10);
while (readers_finished != total_readers && Clock::now() < end_point) {
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/lock.pass.cpp
index 782bf057ebb9..a61fd99368f3 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/lock.pass.cpp
@@ -20,6 +20,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::timed_mutex m;
@@ -43,7 +44,7 @@ void f()
int main(int, char**)
{
m.lock();
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock.pass.cpp
index 5e5eb1df82f1..30cfcaccf9df 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock.pass.cpp
@@ -20,6 +20,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::timed_mutex m;
@@ -47,7 +48,7 @@ void f()
int main(int, char**)
{
m.lock();
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_for.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_for.pass.cpp
index 4eb435f4dd38..fc757def0bbf 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_for.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_for.pass.cpp
@@ -21,6 +21,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::timed_mutex m;
@@ -54,14 +55,14 @@ int main(int, char**)
{
{
m.lock();
- std::thread t(f1);
+ std::thread t = support::make_test_thread(f1);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
}
{
m.lock();
- std::thread t(f2);
+ std::thread t = support::make_test_thread(f2);
std::this_thread::sleep_for(ms(300));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_until.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_until.pass.cpp
index 02bc366e9aac..85649041c948 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_until.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_until.pass.cpp
@@ -21,6 +21,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::timed_mutex m;
@@ -54,14 +55,14 @@ int main(int, char**)
{
{
m.lock();
- std::thread t(f1);
+ std::thread t = support::make_test_thread(f1);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
}
{
m.lock();
- std::thread t(f2);
+ std::thread t = support::make_test_thread(f2);
std::this_thread::sleep_for(ms(300));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/lock.pass.cpp
index 98e34370206e..d58cee5d4a9b 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/lock.pass.cpp
@@ -20,6 +20,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::recursive_timed_mutex m;
@@ -45,7 +46,7 @@ void f()
int main(int, char**)
{
m.lock();
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock.pass.cpp
index 0045414ba4a2..6e36056a736d 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock.pass.cpp
@@ -20,6 +20,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::recursive_timed_mutex m;
@@ -49,7 +50,7 @@ void f()
int main(int, char**)
{
m.lock();
- std::thread t(f);
+ std::thread t = support::make_test_thread(f);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_for.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_for.pass.cpp
index c1072432d84f..4a9fd3ec522e 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_for.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_for.pass.cpp
@@ -21,6 +21,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::recursive_timed_mutex m;
@@ -56,14 +57,14 @@ int main(int, char**)
{
{
m.lock();
- std::thread t(f1);
+ std::thread t = support::make_test_thread(f1);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
}
{
m.lock();
- std::thread t(f2);
+ std::thread t = support::make_test_thread(f2);
std::this_thread::sleep_for(ms(300));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_until.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_until.pass.cpp
index a2734d229eb6..37e4410c0af9 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_until.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_until.pass.cpp
@@ -21,6 +21,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::recursive_timed_mutex m;
@@ -56,14 +57,14 @@ int main(int, char**)
{
{
m.lock();
- std::thread t(f1);
+ std::thread t = support::make_test_thread(f1);
std::this_thread::sleep_for(ms(250));
m.unlock();
t.join();
}
{
m.lock();
- std::thread t(f2);
+ std::thread t = support::make_test_thread(f2);
std::this_thread::sleep_for(ms(300));
m.unlock();
t.join();
diff --git a/libcxx/test/std/thread/thread.mutex/thread.once/thread.once.callonce/call_once.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.once/thread.once.callonce/call_once.pass.cpp
index 398ee058c128..bcc19eaed1c0 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.once/thread.once.callonce/call_once.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.once/thread.once.callonce/call_once.pass.cpp
@@ -19,6 +19,7 @@
#include <thread>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
typedef std::chrono::milliseconds ms;
@@ -190,8 +191,8 @@ int main(int, char**)
{
// check basic functionality
{
- std::thread t0(f0);
- std::thread t1(f0);
+ std::thread t0 = support::make_test_thread(f0);
+ std::thread t1 = support::make_test_thread(f0);
t0.join();
t1.join();
assert(init0_called == 1);
@@ -199,8 +200,8 @@ int main(int, char**)
#ifndef TEST_HAS_NO_EXCEPTIONS
// check basic exception safety
{
- std::thread t0(f3);
- std::thread t1(f3);
+ std::thread t0 = support::make_test_thread(f3);
+ std::thread t1 = support::make_test_thread(f3);
t0.join();
t1.join();
assert(init3_called == 2);
@@ -209,8 +210,8 @@ int main(int, char**)
#endif
// check deadlock avoidance
{
- std::thread t0(f41);
- std::thread t1(f42);
+ std::thread t0 = support::make_test_thread(f41);
+ std::thread t1 = support::make_test_thread(f42);
t0.join();
t1.join();
assert(init41_called == 1);
@@ -219,16 +220,16 @@ int main(int, char**)
#if TEST_STD_VER >= 11
// check functors with 1 arg
{
- std::thread t0(f1);
- std::thread t1(f1);
+ std::thread t0 = support::make_test_thread(f1);
+ std::thread t1 = support::make_test_thread(f1);
t0.join();
t1.join();
assert(init1::called == 1);
}
// check functors with 2 args
{
- std::thread t0(f2);
- std::thread t1(f2);
+ std::thread t0 = support::make_test_thread(f2);
+ std::thread t1 = support::make_test_thread(f2);
t0.join();
t1.join();
assert(init2::called == 5);
diff --git a/libcxx/test/std/thread/thread.mutex/thread.once/thread.once.callonce/race.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.once/thread.once.callonce/race.pass.cpp
index 4ff0274c17a4..54d29aec3a93 100644
--- a/libcxx/test/std/thread/thread.mutex/thread.once/thread.once.callonce/race.pass.cpp
+++ b/libcxx/test/std/thread/thread.mutex/thread.once/thread.once.callonce/race.pass.cpp
@@ -23,6 +23,7 @@
#include <thread>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::once_flag flg0;
@@ -41,8 +42,8 @@ void f0()
int main(int, char**)
{
- std::thread t0(f0);
- std::thread t1(f0);
+ std::thread t0 = support::make_test_thread(f0);
+ std::thread t1 = support::make_test_thread(f0);
t0.join();
t1.join();
assert(global == 1);
diff --git a/libcxx/test/std/thread/thread.semaphore/acquire.pass.cpp b/libcxx/test/std/thread/thread.semaphore/acquire.pass.cpp
index f8466ba8a9ee..aea01f32d36b 100644
--- a/libcxx/test/std/thread/thread.semaphore/acquire.pass.cpp
+++ b/libcxx/test/std/thread/thread.semaphore/acquire.pass.cpp
@@ -25,13 +25,14 @@
#include <semaphore>
#include <thread>
+#include "make_test_thread.h"
#include "test_macros.h"
int main(int, char**)
{
std::counting_semaphore<> s(2);
- std::thread t([&](){
+ std::thread t = support::make_test_thread([&](){
s.acquire();
});
t.join();
diff --git a/libcxx/test/std/thread/thread.semaphore/binary.pass.cpp b/libcxx/test/std/thread/thread.semaphore/binary.pass.cpp
index 5ef65f381eca..55816858876c 100644
--- a/libcxx/test/std/thread/thread.semaphore/binary.pass.cpp
+++ b/libcxx/test/std/thread/thread.semaphore/binary.pass.cpp
@@ -26,6 +26,7 @@
#include <chrono>
#include <thread>
+#include "make_test_thread.h"
#include "test_macros.h"
int main(int, char**)
@@ -40,7 +41,7 @@ int main(int, char**)
}
};
- std::thread t(l);
+ std::thread t = support::make_test_thread(l);
l();
t.join();
diff --git a/libcxx/test/std/thread/thread.semaphore/release.pass.cpp b/libcxx/test/std/thread/thread.semaphore/release.pass.cpp
index 268514ce342e..b49747b09601 100644
--- a/libcxx/test/std/thread/thread.semaphore/release.pass.cpp
+++ b/libcxx/test/std/thread/thread.semaphore/release.pass.cpp
@@ -25,6 +25,7 @@
#include <semaphore>
#include <thread>
+#include "make_test_thread.h"
#include "test_macros.h"
int main(int, char**)
@@ -34,7 +35,7 @@ int main(int, char**)
s.release();
s.acquire();
- std::thread t([&](){
+ std::thread t = support::make_test_thread([&](){
s.acquire();
});
s.release(2);
diff --git a/libcxx/test/std/thread/thread.semaphore/timed.pass.cpp b/libcxx/test/std/thread/thread.semaphore/timed.pass.cpp
index c46dae5f9052..281e3b47ccef 100644
--- a/libcxx/test/std/thread/thread.semaphore/timed.pass.cpp
+++ b/libcxx/test/std/thread/thread.semaphore/timed.pass.cpp
@@ -26,6 +26,7 @@
#include <thread>
#include <chrono>
+#include "make_test_thread.h"
#include "test_macros.h"
int main(int, char**)
@@ -37,7 +38,7 @@ int main(int, char**)
assert(!s.try_acquire_until(start + std::chrono::milliseconds(250)));
assert(!s.try_acquire_for(std::chrono::milliseconds(250)));
- std::thread t([&](){
+ std::thread t = support::make_test_thread([&](){
std::this_thread::sleep_for(std::chrono::milliseconds(250));
s.release();
std::this_thread::sleep_for(std::chrono::milliseconds(250));
diff --git a/libcxx/test/std/thread/thread.semaphore/try_acquire.pass.cpp b/libcxx/test/std/thread/thread.semaphore/try_acquire.pass.cpp
index 45cdcd48e2ea..9b387c95e3af 100644
--- a/libcxx/test/std/thread/thread.semaphore/try_acquire.pass.cpp
+++ b/libcxx/test/std/thread/thread.semaphore/try_acquire.pass.cpp
@@ -25,6 +25,7 @@
#include <semaphore>
#include <thread>
+#include "make_test_thread.h"
#include "test_macros.h"
int main(int, char**)
@@ -35,7 +36,7 @@ int main(int, char**)
s.release();
assert(s.try_acquire());
s.release(2);
- std::thread t([&](){
+ std::thread t = support::make_test_thread([&](){
assert(s.try_acquire());
});
t.join();
diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.algorithm/swap.pass.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.algorithm/swap.pass.cpp
index f2cbba6bda5a..332754ae2a52 100644
--- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.algorithm/swap.pass.cpp
+++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.algorithm/swap.pass.cpp
@@ -19,6 +19,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
class G
@@ -47,7 +48,7 @@ int main(int, char**)
{
{
G g;
- std::thread t0(g);
+ std::thread t0 = support::make_test_thread(g);
std::thread::id id0 = t0.get_id();
std::thread t1;
std::thread::id id1 = t1.get_id();
diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.assign/copy.compile.fail.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.assign/copy.compile.fail.cpp
index e67ceea5db61..9d7e1044be29 100644
--- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.assign/copy.compile.fail.cpp
+++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.assign/copy.compile.fail.cpp
@@ -13,40 +13,11 @@
// thread& operator=(thread&& t);
#include <thread>
-#include <new>
-#include <cstdlib>
-#include <cassert>
-
-class G
-{
- int alive_;
-public:
- static int n_alive;
- static bool op_run;
-
- G() : alive_(1) {++n_alive;}
- G(const G& g) : alive_(g.alive_) {++n_alive;}
- ~G() {alive_ = 0; --n_alive;}
-
- void operator()()
- {
- assert(alive_ == 1);
- assert(n_alive >= 1);
- op_run = true;
- }
-
-};
-
-int G::n_alive = 0;
-bool G::op_run = false;
int main(int, char**)
{
- {
- std::thread t0(G());
- std::thread t1;
- t1 = t0;
- }
-
- return 0;
+ std::thread t0;
+ std::thread t1;
+ t0 = t1;
+ return 0;
}
diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.assign/move.pass.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.assign/move.pass.cpp
index c2104752d0ab..371d8266dc2a 100644
--- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.assign/move.pass.cpp
+++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.assign/move.pass.cpp
@@ -18,6 +18,7 @@
#include <cassert>
#include <utility>
+#include "make_test_thread.h"
#include "test_macros.h"
class G
@@ -51,7 +52,7 @@ int main(int, char**)
assert(G::n_alive == 1);
assert(!G::op_run);
- std::thread t0(g);
+ std::thread t0 = support::make_test_thread(g);
std::thread::id id = t0.get_id();
std::thread t1;
diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.assign/move2.pass.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.assign/move2.pass.cpp
index 27cbf3a46693..ccae438018c2 100644
--- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.assign/move2.pass.cpp
+++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.assign/move2.pass.cpp
@@ -20,6 +20,7 @@
#include <exception>
#include <utility>
+#include "make_test_thread.h"
#include "test_macros.h"
struct G
@@ -37,7 +38,7 @@ int main(int, char**)
std::set_terminate(f1);
{
G g;
- std::thread t0(g);
+ std::thread t0 = support::make_test_thread(g);
std::thread t1;
t0 = std::move(t1);
assert(false);
diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/constr.compile.fail.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/constr.compile.fail.cpp
index 26231373f80c..dd472f079044 100644
--- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/constr.compile.fail.cpp
+++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/constr.compile.fail.cpp
@@ -16,12 +16,10 @@
#include <thread>
-#include <cassert>
int main(int, char**)
{
volatile std::thread t1;
std::thread t2 ( t1, 1, 2.0 );
-
- return 0;
+ return 0;
}
diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/copy.compile.fail.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/copy.compile.fail.cpp
index 2a3632cd42fb..f0e288b3c19c 100644
--- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/copy.compile.fail.cpp
+++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/copy.compile.fail.cpp
@@ -13,55 +13,10 @@
// thread(const thread&) = delete;
#include <thread>
-#include <new>
-#include <cstdlib>
-#include <cassert>
-
-class G
-{
- int alive_;
-public:
- static int n_alive;
- static bool op_run;
-
- G() : alive_(1) {++n_alive;}
- G(const G& g) : alive_(g.alive_) {++n_alive;}
- ~G() {alive_ = 0; --n_alive;}
-
- void operator()()
- {
- assert(alive_ == 1);
- assert(n_alive >= 1);
- op_run = true;
- }
-
- void operator()(int i, double j)
- {
- assert(alive_ == 1);
- assert(n_alive >= 1);
- assert(i == 5);
- assert(j == 5.5);
- op_run = true;
- }
-};
-
-int G::n_alive = 0;
-bool G::op_run = false;
int main(int, char**)
{
- {
- assert(G::n_alive == 0);
- assert(!G::op_run);
- std::thread t0(G(), 5, 5.5);
- std::thread::id id = t0.get_id();
- std::thread t1 = t0;
- assert(t1.get_id() == id);
- assert(t0.get_id() == std::thread::id());
- t1.join();
- assert(G::n_alive == 0);
- assert(G::op_run);
- }
-
- return 0;
+ std::thread t0; (void)t0;
+ std::thread t1(t0); (void)t1;
+ return 0;
}
diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/move.pass.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/move.pass.cpp
index 55265cce9f93..3611fc623d14 100644
--- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/move.pass.cpp
+++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/move.pass.cpp
@@ -19,6 +19,7 @@
#include <cstdlib>
#include <utility>
+#include "make_test_thread.h"
#include "test_macros.h"
class G
@@ -52,7 +53,7 @@ int main(int, char**)
assert(G::n_alive == 1);
assert(!G::op_run);
- std::thread t0(g);
+ std::thread t0 = support::make_test_thread(g);
std::thread::id id = t0.get_id();
std::thread t1 = std::move(t0);
diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.destr/dtor.pass.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.destr/dtor.pass.cpp
index 34e0e51b1200..1af063c02e07 100644
--- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.destr/dtor.pass.cpp
+++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.destr/dtor.pass.cpp
@@ -20,6 +20,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
class G
@@ -57,7 +58,7 @@ int main(int, char**)
assert(!G::op_run);
G g;
{
- std::thread t(g);
+ std::thread t = support::make_test_thread(g);
std::this_thread::sleep_for(std::chrono::milliseconds(250));
}
}
diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/detach.pass.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/detach.pass.cpp
index bf72e3437a47..ea82d5392aeb 100644
--- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/detach.pass.cpp
+++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/detach.pass.cpp
@@ -19,6 +19,7 @@
#include <system_error>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
std::atomic_bool done(false);
@@ -65,7 +66,7 @@ int main(int, char**)
{
{
G g;
- std::thread t0(g);
+ std::thread t0 = support::make_test_thread(g);
assert(t0.joinable());
t0.detach();
assert(!t0.joinable());
@@ -76,7 +77,7 @@ int main(int, char**)
assert(G::n_alive == 0);
#ifndef TEST_HAS_NO_EXCEPTIONS
{
- std::thread t0(foo);
+ std::thread t0 = support::make_test_thread(foo);
assert(t0.joinable());
t0.detach();
assert(!t0.joinable());
diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/get_id.pass.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/get_id.pass.cpp
index 676666c34262..314b1e072deb 100644
--- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/get_id.pass.cpp
+++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/get_id.pass.cpp
@@ -19,6 +19,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
class G
@@ -47,7 +48,7 @@ int main(int, char**)
{
{
G g;
- std::thread t0(g);
+ std::thread t0 = support::make_test_thread(g);
std::thread::id id0 = t0.get_id();
std::thread t1;
std::thread::id id1 = t1.get_id();
diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/join.pass.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/join.pass.cpp
index b64a111c6be7..184b931dff84 100644
--- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/join.pass.cpp
+++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/join.pass.cpp
@@ -20,6 +20,7 @@
#include <cassert>
#include <system_error>
+#include "make_test_thread.h"
#include "test_macros.h"
class G
@@ -50,7 +51,7 @@ int main(int, char**)
{
{
G g;
- std::thread t0(g);
+ std::thread t0 = support::make_test_thread(g);
assert(t0.joinable());
t0.join();
assert(!t0.joinable());
@@ -64,7 +65,7 @@ int main(int, char**)
}
#ifndef TEST_HAS_NO_EXCEPTIONS
{
- std::thread t0(foo);
+ std::thread t0 = support::make_test_thread(foo);
t0.detach();
try {
t0.join();
diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/joinable.pass.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/joinable.pass.cpp
index a2ffe8bb19a2..d3c1405c5a15 100644
--- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/joinable.pass.cpp
+++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/joinable.pass.cpp
@@ -19,6 +19,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
class G
@@ -47,7 +48,7 @@ int main(int, char**)
{
{
G g;
- std::thread t0(g);
+ std::thread t0 = support::make_test_thread(g);
assert(t0.joinable());
t0.join();
assert(!t0.joinable());
diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/swap.pass.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/swap.pass.cpp
index a1ab4781d95a..f390899aa5d3 100644
--- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/swap.pass.cpp
+++ b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/swap.pass.cpp
@@ -19,6 +19,7 @@
#include <cstdlib>
#include <cassert>
+#include "make_test_thread.h"
#include "test_macros.h"
class G
@@ -47,7 +48,7 @@ int main(int, char**)
{
{
G g;
- std::thread t0(g);
+ std::thread t0 = support::make_test_thread(g);
std::thread::id id0 = t0.get_id();
std::thread t1;
std::thread::id id1 = t1.get_id();
diff --git a/libcxx/test/support/make_test_thread.h b/libcxx/test/support/make_test_thread.h
new file mode 100644
index 000000000000..3366d126ae22
--- /dev/null
+++ b/libcxx/test/support/make_test_thread.h
@@ -0,0 +1,23 @@
+//===----------------------------------------------------------------------===//
+//
+// 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_SUPPORT_MAKE_TEST_THREAD_H
+#define TEST_SUPPORT_MAKE_TEST_THREAD_H
+
+#include <thread>
+#include <utility>
+
+namespace support {
+
+template <class F, class ...Args>
+std::thread make_test_thread(F&& f, Args&& ...args) {
+ return std::thread(std::forward<F>(f), std::forward<Args>(args)...);
+}
+
+} // end namespace support
+
+#endif // TEST_SUPPORT_MAKE_TEST_THREAD_H
diff --git a/libcxxabi/test/guard_threaded_test.pass.cpp b/libcxxabi/test/guard_threaded_test.pass.cpp
index 7e5e0de8c790..798d11b15d1a 100644
--- a/libcxxabi/test/guard_threaded_test.pass.cpp
+++ b/libcxxabi/test/guard_threaded_test.pass.cpp
@@ -20,6 +20,7 @@
#include <memory>
#include <vector>
+#include "make_test_thread.h"
#include "test_macros.h"
@@ -349,21 +350,21 @@ void test_futex_syscall() {
int lock1 = 0;
int lock2 = 0;
int lock3 = 0;
- std::thread waiter1([&]() {
+ std::thread waiter1 = support::make_test_thread([&]() {
int expect = 0;
PlatformFutexWait(&lock1, expect);
assert(lock1 == 1);
});
- std::thread waiter2([&]() {
+ std::thread waiter2 = support::make_test_thread([&]() {
int expect = 0;
PlatformFutexWait(&lock2, expect);
assert(lock2 == 2);
});
- std::thread waiter3([&]() {
+ std::thread waiter3 = support::make_test_thread([&]() {
int expect = 42; // not the value
PlatformFutexWait(&lock3, expect); // doesn't block
});
- std::thread waker([&]() {
+ std::thread waker = support::make_test_thread([&]() {
lock1 = 1;
PlatformFutexWake(&lock1);
lock2 = 2;
diff --git a/libcxxabi/test/test_guard.pass.cpp b/libcxxabi/test/test_guard.pass.cpp
index 2168986c455e..82370c5a82c9 100644
--- a/libcxxabi/test/test_guard.pass.cpp
+++ b/libcxxabi/test/test_guard.pass.cpp
@@ -12,6 +12,7 @@
#ifndef _LIBCXXABI_HAS_NO_THREADS
#include <thread>
+#include "make_test_thread.h"
#endif
#include "test_macros.h"
@@ -97,7 +98,8 @@ namespace test4 {
}
void test() {
- std::thread t1(helper), t2(helper);
+ std::thread t1 = support::make_test_thread(helper);
+ std::thread t2 = support::make_test_thread(helper);
t1.join();
t2.join();
assert(run_count == 1);
@@ -124,12 +126,12 @@ namespace test5 {
void helper() {
static int a = one(); ((void)a);
- std::thread t(another_helper);
+ std::thread t = support::make_test_thread(another_helper);
t.join();
}
void test() {
- std::thread t(helper);
+ std::thread t = support::make_test_thread(helper);
t.join();
assert(run_count == 1);
}
diff --git a/libcxxabi/test/thread_local_destruction_order.pass.cpp b/libcxxabi/test/thread_local_destruction_order.pass.cpp
index eeb90b820b87..a01f9848a277 100644
--- a/libcxxabi/test/thread_local_destruction_order.pass.cpp
+++ b/libcxxabi/test/thread_local_destruction_order.pass.cpp
@@ -25,6 +25,8 @@
#include <cassert>
#include <thread>
+#include "make_test_thread.h"
+
int seq = 0;
class OrderChecker {
@@ -59,7 +61,7 @@ void thread_fn() {
int main(int, char**) {
static OrderChecker fn_static{6};
- std::thread{thread_fn}.join();
+ support::make_test_thread(thread_fn).join();
assert(seq == 3);
thread_local OrderChecker fn_thread_local{4};
More information about the llvm-branch-commits
mailing list