From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2181) id 4CB33385703D; Thu, 20 Apr 2023 13:57:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4CB33385703D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681999042; bh=w6cDrD1YecLPz81cl/BeFFjJ6YTvfpZO/vfJ93P+IZA=; h=From:To:Subject:Date:From; b=w8aWeYnmrjUyfyOSn/FpgrRq0LgvFUkxPIhiqytUFk9k2perok8+auadBAxQmZQOq QAKFUclw9cJiFG/7IJM7gdfu40TXcF78HHif4icbqhCHIaP2kZ9RZ/aPRm97CG/XK1 2skY5EeIr4j5CkRqMDIeoVkkXkwH1Gc7D0LzKAcI= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jonathan Wakely To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r12-9452] libstdc++: Fix assigning nullptr to std::atomic> (LWG 3893) X-Act-Checkin: gcc X-Git-Author: Jonathan Wakely X-Git-Refname: refs/heads/releases/gcc-12 X-Git-Oldrev: 21e5ee580b553a0aa28bae8c7463a9c5a8e7a646 X-Git-Newrev: 813cc7304c1d1b18ca4a2c1208ad802360bf09d6 Message-Id: <20230420135722.4CB33385703D@sourceware.org> Date: Thu, 20 Apr 2023 13:57:22 +0000 (GMT) List-Id: https://gcc.gnu.org/g:813cc7304c1d1b18ca4a2c1208ad802360bf09d6 commit r12-9452-g813cc7304c1d1b18ca4a2c1208ad802360bf09d6 Author: Jonathan Wakely Date: Wed Mar 22 21:54:24 2023 +0000 libstdc++: Fix assigning nullptr to std::atomic> (LWG 3893) LWG voted this to Tentatively Ready recently. libstdc++-v3/ChangeLog: * include/bits/shared_ptr_atomic.h (atomic::operator=(nullptr_t)): Add overload, as per LWG 3893. * testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc: Check assignment from nullptr. (cherry picked from commit a495b738e4a89a8104798d005fd09474bbb916ff) Diff: --- libstdc++-v3/include/bits/shared_ptr_atomic.h | 6 ++++++ .../testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/libstdc++-v3/include/bits/shared_ptr_atomic.h b/libstdc++-v3/include/bits/shared_ptr_atomic.h index 7f30d0ac008..94570cd3ab3 100644 --- a/libstdc++-v3/include/bits/shared_ptr_atomic.h +++ b/libstdc++-v3/include/bits/shared_ptr_atomic.h @@ -642,6 +642,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION operator=(shared_ptr<_Tp> __desired) noexcept { _M_impl.swap(__desired, memory_order_seq_cst); } + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3893. LWG 3661 broke atomic> a; a = nullptr; + void + operator=(nullptr_t) noexcept + { store(nullptr); } + shared_ptr<_Tp> exchange(shared_ptr<_Tp> __desired, memory_order __o = memory_order_seq_cst) noexcept diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc index a1902745a3e..54cf2621ea1 100644 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc @@ -145,6 +145,14 @@ test_counting() VERIFY( counter == 2 ); } +void +test_lwg3893() +{ + // LWG 3893. LWG 3661 broke atomic> a; a = nullptr; + std::atomic> a; + a = nullptr; +} + int main() { @@ -152,4 +160,5 @@ main() test_atomic_shared_ptr(); test_wait_notify(); test_counting(); + test_lwg3893(); }