From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2136) id 855603ACF004; Wed, 17 Jun 2020 21:21:45 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 855603ACF004 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1592428905; bh=UpOqX68P5q759hp5eDI2eIpV/qM/BYVeShAE6Ykhlw0=; h=From:To:Subject:Date:From; b=KFB8r4KrSXqohK4pvzqM2iZLOOGTzMQIwSczQ+tJ6+V7OFvLZ4HxrWqPQabXI/9o1 N9guZkbRVeiT4nGXwNqamJZKSnLuQmLiwqPdm79EDK5136jH8jEeMi58Ufl8Dc5WnT +dPEKyv88tAQzAa3s2kdgYeqOaQ703VilsI2rHVw= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Aldy Hernandez To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc/devel/ranger] Implent C++20 std::atomic_flag::test X-Act-Checkin: gcc X-Git-Author: Ulrich Drepper X-Git-Refname: refs/heads/devel/ranger X-Git-Oldrev: 3ebd168b443d946f9381d012176e38598987b133 X-Git-Newrev: 491ba663e05887c0353edf571be36e8f04183df3 Message-Id: <20200617212145.855603ACF004@sourceware.org> Date: Wed, 17 Jun 2020 21:21:45 +0000 (GMT) X-BeenThere: libstdc++-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 21:21:45 -0000 https://gcc.gnu.org/g:491ba663e05887c0353edf571be36e8f04183df3 commit 491ba663e05887c0353edf571be36e8f04183df3 Author: Ulrich Drepper Date: Tue May 12 07:37:09 2020 +0200 Implent C++20 std::atomic_flag::test * include/bits/atomic_base.h (atomic_flag): Implement test member function. * include/std/version: Define __cpp_lib_atomic_flag_test. * testsuite/29_atomics/atomic_flag/test/explicit.cc: New file. * testsuite/29_atomics/atomic_flag/test/implicit.cc: New file. Diff: --- libstdc++-v3/ChangeLog | 8 ++++++++ libstdc++-v3/include/bits/atomic_base.h | 20 ++++++++++++++++++++ libstdc++-v3/include/std/version | 1 + 3 files changed, 29 insertions(+) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index a2ff49d9e51..3264fd4c481 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2020-05-08 Ulrich Drepper + + * include/bits/atomic_base.h (atomic_flag): Implement test member + function. + * include/std/version: Define __cpp_lib_atomic_flag_test. + * testsuite/29_atomics/atomic_flag/test/explicit.cc: New file. + * testsuite/29_atomics/atomic_flag/test/implicit.cc: New file. + 2020-05-07 Jonathan Wakely PR libstdc++/94971 (partial) diff --git a/libstdc++-v3/include/bits/atomic_base.h b/libstdc++-v3/include/bits/atomic_base.h index 87fe0bd6000..3b66b040976 100644 --- a/libstdc++-v3/include/bits/atomic_base.h +++ b/libstdc++-v3/include/bits/atomic_base.h @@ -208,6 +208,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __atomic_test_and_set (&_M_i, int(__m)); } +#if __cplusplus > 201703L +#define __cpp_lib_atomic_flag_test 201907L + + _GLIBCXX_ALWAYS_INLINE bool + test(memory_order __m = memory_order_seq_cst) noexcept + { + __atomic_flag_data_type __v; + __atomic_load(&_M_i, &__v, int(__m)); + return __v == __GCC_ATOMIC_TEST_AND_SET_TRUEVAL; + } + + _GLIBCXX_ALWAYS_INLINE bool + test(memory_order __m = memory_order_seq_cst) volatile noexcept + { + __atomic_flag_data_type __v; + __atomic_load(&_M_i, &__v, int(__m)); + return __v == __GCC_ATOMIC_TEST_AND_SET_TRUEVAL; + } +#endif // C++20 + _GLIBCXX_ALWAYS_INLINE void clear(memory_order __m = memory_order_seq_cst) noexcept { diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version index c3a5bd26e63..c6bde2cfbda 100644 --- a/libstdc++-v3/include/std/version +++ b/libstdc++-v3/include/std/version @@ -164,6 +164,7 @@ #if __cplusplus > 201703L // c++2a +#define __cpp_lib_atomic_flag_test 201907L #define __cpp_lib_atomic_float 201711L #define __cpp_lib_atomic_ref 201806L #define __cpp_lib_atomic_value_initialization 201911L