From e12d3780e6808121365854a9780abac5ba6a5123 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Sat, 15 Jul 2017 16:43:22 +0100 Subject: [PATCH] Reorder std::scoped_lock parameters as per P0739R0 DR status * include/std/mutex (scoped_lock): Reorder std::adopt_lock_t parameter as per P0739R0. * testsuite/30_threads/scoped_lock/cons/1.cc: Reorder arguments. * testsuite/30_threads/scoped_lock/cons/deduction.cc: Test deduction with std::adopt_lock_t. * testsuite/30_threads/scoped_lock/requirements/typedefs.cc: Check feature-test macro. From-SVN: r250223 --- libstdc++-v3/ChangeLog | 10 ++++++++ libstdc++-v3/include/std/mutex | 6 ++--- .../30_threads/scoped_lock/cons/1.cc | 4 +-- .../30_threads/scoped_lock/cons/deduction.cc | 25 +++++++++++++++++++ .../scoped_lock/requirements/typedefs.cc | 6 +++++ 5 files changed, 46 insertions(+), 5 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 70d1944490e..87b2f63d0ab 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,13 @@ +2017-07-15 Jonathan Wakely + + * include/std/mutex (scoped_lock): Reorder std::adopt_lock_t parameter + as per P0739R0. + * testsuite/30_threads/scoped_lock/cons/1.cc: Reorder arguments. + * testsuite/30_threads/scoped_lock/cons/deduction.cc: Test deduction + with std::adopt_lock_t. + * testsuite/30_threads/scoped_lock/requirements/typedefs.cc: Check + feature-test macro. + 2017-07-14 Jason Merrill Jonathan Wakely diff --git a/libstdc++-v3/include/std/mutex b/libstdc++-v3/include/std/mutex index df48b460571..fadb9f60481 100644 --- a/libstdc++-v3/include/std/mutex +++ b/libstdc++-v3/include/std/mutex @@ -557,7 +557,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } #if __cplusplus > 201402L -#define __cpp_lib_scoped_lock 201703 +#define __cpp_lib_scoped_lock 201707 /** @brief A scoped lock type for multiple lockable objects. * * A scoped_lock controls mutex ownership within a scope, releasing @@ -570,7 +570,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION explicit scoped_lock(_MutexTypes&... __m) : _M_devices(std::tie(__m...)) { std::lock(__m...); } - explicit scoped_lock(_MutexTypes&... __m, adopt_lock_t) noexcept + explicit scoped_lock(adopt_lock_t, _MutexTypes&... __m) noexcept : _M_devices(std::tie(__m...)) { } // calling thread owns mutex @@ -609,7 +609,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION explicit scoped_lock(mutex_type& __m) : _M_device(__m) { _M_device.lock(); } - explicit scoped_lock(mutex_type& __m, adopt_lock_t) noexcept + explicit scoped_lock(adopt_lock_t, mutex_type& __m) noexcept : _M_device(__m) { } // calling thread owns mutex diff --git a/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/1.cc b/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/1.cc index 9f1b48c809a..e420ab08378 100644 --- a/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/1.cc +++ b/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/1.cc @@ -79,7 +79,7 @@ void test01() try { - std::scoped_lock l(m, std::adopt_lock); + std::scoped_lock l(std::adopt_lock, m); } catch (...) { @@ -113,7 +113,7 @@ void test02() try { - std::scoped_lock, Lockable<2>> l(m1, m2, std::adopt_lock); + std::scoped_lock, Lockable<2>> l(std::adopt_lock, m1, m2); VERIFY( m1.m.locked ); VERIFY( m2.m.locked ); } diff --git a/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/deduction.cc b/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/deduction.cc index 399de7a5ae6..7d4f5bfc386 100644 --- a/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/deduction.cc +++ b/libstdc++-v3/testsuite/30_threads/scoped_lock/cons/deduction.cc @@ -51,3 +51,28 @@ test01() std::scoped_lock l2(m2, m3); check_type>(l2); } + +void +test02() +{ + std::scoped_lock l0(std::adopt_lock); + check_type>(l0); + + struct BasicLockable { + void lock() { } + void unlock() { } + } m1; + + std::scoped_lock l1(std::adopt_lock, m1); + check_type>(l1); + + struct Lockable { + void lock() { } + void unlock() { } + bool try_lock() { return true; } + } m2; + + std::mutex m3; + std::scoped_lock l2(std::adopt_lock, m2, m3); + check_type>(l2); +} diff --git a/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/typedefs.cc b/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/typedefs.cc index 55756d87262..0a8903ebaab 100644 --- a/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/typedefs.cc @@ -25,6 +25,12 @@ #include +#ifndef __cpp_lib_scoped_lock +# error "Feature-test macro for scoped_lock missing" +#elif __cpp_lib_scoped_lock != 201707 +# error "Feature-test macro for scoped_lock has wrong value" +#endif + void test01() { // Check for required typedefs -- 2.30.2