From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2062) id 6C4AD3858403; Fri, 10 Dec 2021 02:14:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6C4AD3858403 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Thomas Rodgers To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r11-9371] libstdc++: Make atomic::wait() const [PR102994] X-Act-Checkin: gcc X-Git-Author: Thomas Rodgers X-Git-Refname: refs/heads/releases/gcc-11 X-Git-Oldrev: 64ccdadd1773976cd3c27c297966439ffeae391f X-Git-Newrev: aca7d4e8790bff32ee749936bb0224d873c46052 Message-Id: <20211210021408.6C4AD3858403@sourceware.org> Date: Fri, 10 Dec 2021 02:14:08 +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: Fri, 10 Dec 2021 02:14:08 -0000 https://gcc.gnu.org/g:aca7d4e8790bff32ee749936bb0224d873c46052 commit r11-9371-gaca7d4e8790bff32ee749936bb0224d873c46052 Author: Thomas Rodgers Date: Thu Dec 9 15:35:25 2021 -0800 libstdc++: Make atomic::wait() const [PR102994] This was an oversight in the original commit adding wait/notify to atomic. libstdc++-v3/ChangeLog: PR libstdc++/102994 * include/bits/atomic_base.h (__atomic_base<_PTp*>::wait()): Add const qualifier. * include/std/atomic (atomic<_Tp*>::wait(), atomic_wait()): Likewise. * testsuite/29_atomics/atomic/wait_notify/102994.cc: New test. (cherry picked from commit 38c60e5075f89265a560eab166d43247624a7535) Diff: --- libstdc++-v3/include/bits/atomic_base.h | 2 +- libstdc++-v3/include/std/atomic | 8 ++++---- .../testsuite/29_atomics/atomic/wait_notify/102994.cc | 19 +++++++++++++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/libstdc++-v3/include/bits/atomic_base.h b/libstdc++-v3/include/bits/atomic_base.h index 20cf1343c58..2db35722ce0 100644 --- a/libstdc++-v3/include/bits/atomic_base.h +++ b/libstdc++-v3/include/bits/atomic_base.h @@ -902,7 +902,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cpp_lib_atomic_wait _GLIBCXX_ALWAYS_INLINE void wait(__pointer_type __old, - memory_order __m = memory_order_seq_cst) noexcept + memory_order __m = memory_order_seq_cst) const noexcept { std::__atomic_wait_address_v(&_M_p, __old, [__m, this] diff --git a/libstdc++-v3/include/std/atomic b/libstdc++-v3/include/std/atomic index 9b1fb15ac41..fdffacc35df 100644 --- a/libstdc++-v3/include/std/atomic +++ b/libstdc++-v3/include/std/atomic @@ -637,9 +637,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __cmpexch_failure_order(__m)); } -#if __cpp_lib_atomic_wait +#if __cpp_lib_atomic_wait void - wait(__pointer_type __old, memory_order __m = memory_order_seq_cst) noexcept + wait(__pointer_type __old, memory_order __m = memory_order_seq_cst) const noexcept { _M_b.wait(__old, __m); } // TODO add const volatile overload @@ -1421,12 +1421,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template inline void - atomic_notify_one(atomic<_Tp>* __a) noexcept + atomic_notify_one(const atomic<_Tp>* __a) noexcept { __a->notify_one(); } template inline void - atomic_notify_all(atomic<_Tp>* __a) noexcept + atomic_notify_all(const atomic<_Tp>* __a) noexcept { __a->notify_all(); } #endif // __cpp_lib_atomic_wait diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/102994.cc b/libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/102994.cc new file mode 100644 index 00000000000..9d92ff954f1 --- /dev/null +++ b/libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/102994.cc @@ -0,0 +1,19 @@ +// { dg-options "-std=gnu++20" } +// { dg-do compile { target c++20 } } +// { dg-require-gthreads "" } + +#include + +void +test1(const std::atomic& a, char* p) +{ + a.wait(p); +} + +void +test2(const std::atomic* a, int v) +{ + std::atomic_wait(a, v); + std::atomic_notify_one(a); + std::atomic_notify_all(a); +}