From patchwork Sat Jan 15 02:53:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Rodgers X-Patchwork-Id: 50056 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AAAD2385DC07 for ; Sat, 15 Jan 2022 02:54:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AAAD2385DC07 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1642215253; bh=3vdoWYG5Nk9AhRQ6p5T3HHxyGHmdQpl1V88bNehG37I=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=kZyfVXxHrKy9/wfRqYuzRO6f1TD6v/rLh5ErUhO4G3ph0UQyaAjcasDelNxPmnBwb PNOoVtRvtqwNi9to5NckrhItI/i0hjPWDIq7EZlBSBJMn04ELJVeg7EJIWHXN0Rjs0 6Nh5n2k/Nb8gd39pfQktelXypFmWyZ3UBAR0zKO8= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 7E8B83858C39 for ; Sat, 15 Jan 2022 02:53:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7E8B83858C39 Received: from mail-oi1-f197.google.com (mail-oi1-f197.google.com [209.85.167.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-590-BEPeb6IIO6C8uF5vH4fUmw-1; Fri, 14 Jan 2022 21:53:41 -0500 X-MC-Unique: BEPeb6IIO6C8uF5vH4fUmw-1 Received: by mail-oi1-f197.google.com with SMTP id q130-20020aca4388000000b002c7f7bcafabso7256286oia.2 for ; Fri, 14 Jan 2022 18:53:41 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=3kIzNPsDClHPyCdoOzWw0njJ0jF1nrqqj/60thkPG0s=; b=4SFTWbxb4hYtJlp0ClqdKJ8ajhKVpaw99b1W8FtOxmPy2TeMnXAD1ImObj2ysJWdMQ u76jdINo7VPuqJjd99Ohc9xNFP4DqPLNZJbyYOPb34oag68o45Odxj/FAbfiFRWbBLtQ iVtOXWS8+7sdXm9RSMC3uJ8q6dPK0gNDDyXaCQZb8nu8ziTIM4r+VcrF7Jn3HMuwLcDd Tj20LbsQRiaeVl4fjPjpBP8sAB5VUuL7QoB/wQtQNWaIcrW2OXF6GY7iiy6qFQeT751l 5ST3pPHw7oUMkyLDKGH3+XKuCYROHNpi7plbrkHP3HOq6XrCCwRQpyssQQ0O/proveKh /WjQ== X-Gm-Message-State: AOAM530pYHTDOCTmrBc+SFc4xI2xg0EhVReeHHNVRhcbt2yGYYyXUnd8 fiiLUuvs1GO5YxYiXkRq9g70OzWwRzpNYA6m3c0yeFhlbCfU8668mOoUV3Yeo3+QDLeLOdyyGwp XByitmSH4TyF7C8B5ow9IkbNolVRhT4O0wg== X-Received: by 2002:a9d:12f7:: with SMTP id g110mr9226057otg.299.1642215221180; Fri, 14 Jan 2022 18:53:41 -0800 (PST) X-Google-Smtp-Source: ABdhPJywqWoLZxlXnw4Q+VLShu9uA33k9yxZYJ0/PZnS9iTay4aE791/vpL8klyXNih8Uh13zISNSk3mzmF8V4897DI= X-Received: by 2002:a9d:12f7:: with SMTP id g110mr9226044otg.299.1642215220948; Fri, 14 Jan 2022 18:53:40 -0800 (PST) MIME-Version: 1.0 Date: Fri, 14 Jan 2022 18:53:30 -0800 Message-ID: Subject: [PATCH] libstdc++: Add missing free functions for atomic_flag [PR103934] To: "libstdc++" , gcc Patches X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-14.7 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, HTML_MESSAGE, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Thomas Rodgers via Gcc-patches From: Thomas Rodgers Reply-To: Thomas Rodgers Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" From c2b74fd7cf2668d288f46da42565e5eb954e5e1f Mon Sep 17 00:00:00 2001 From: Thomas Rodgers Date: Fri, 14 Jan 2022 18:30:27 -0800 Subject: [PATCH] libstdc++: Add missing free functions for atomic_flag [PR103934] libstdc++-v3/ChangeLog: PR103934 * include/std/atomic: Add missing free functions. * testsuite/29_atomics/atomic_flag/wait_notify/1.cc: Add test case to cover missing atomic_flag free functions. --- libstdc++-v3/include/std/atomic | 39 +++++++++++++++++++ .../29_atomics/atomic_flag/wait_notify/1.cc | 27 +++++++++++-- 2 files changed, 63 insertions(+), 3 deletions(-) diff --git a/libstdc++-v3/include/std/atomic b/libstdc++-v3/include/std/atomic index 9df17704f7e..92c96a9b047 100644 --- a/libstdc++-v3/include/std/atomic +++ b/libstdc++-v3/include/std/atomic @@ -1216,6 +1216,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION memory_order __m) noexcept { return __a->test_and_set(__m); } +#if __cpp_lib_atomic_flag_test + inline bool + atomic_flag_test(const atomic_flag* __a) noexcept + { return __a->test(); } + + inline bool + atomic_flag_test(const volatile atomic_flag* __a) noexcept + { return __a->test(); } + + inline bool + atomic_flag_test_explicit(const atomic_flag* __a, + memory_order __m) noexcept + { return __a->test(__m); } + + inline bool + atomic_flag_test_explicit(const volatile atomic_flag* __a, + memory_order __m) noexcept + { return __a->test(__m); } +#endif + inline void atomic_flag_clear_explicit(atomic_flag* __a, memory_order __m) noexcept { __a->clear(__m); } @@ -1241,6 +1261,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION atomic_flag_clear(volatile atomic_flag* __a) noexcept { atomic_flag_clear_explicit(__a, memory_order_seq_cst); } +#if __cpp_lib_atomic_wait + inline void + atomic_flag_wait(const atomic_flag* __a, bool __old) noexcept + { __a->wait(__old); } + + inline void + atomic_flag_wait_explicit(const atomic_flag* __a, bool __old, + std::memory_order __m) noexcept + { __a->wait(__old, __m); } + + inline void + atomic_flag_notify_one(const atomic_flag* __a) noexcept + { __a->notify_one(); } + + inline void + atomic_flag_notify_all(const atomic_flag* __a) noexcept + { __a->notify_all(); } +#endif // __cpp_lib_atomic_wait + template using __atomic_val_t = typename atomic<_Tp>::value_type; diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/wait_notify/1.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/wait_notify/1.cc index 87a104059ff..1050b72a1c6 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/wait_notify/1.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/wait_notify/1.cc @@ -26,8 +26,8 @@ #include -int -main() +void +test01() { std::atomic_flag a; VERIFY( !a.test() ); @@ -39,5 +39,26 @@ main() }); a.wait(false); t.join(); - return 0; +} + +void +test02() +{ + std::atomic_flag a; + VERIFY( !std::atomic_flag_test(&a) ); + std::atomic_flag_wait(&a, true); + std::thread t([&] + { + std::atomic_flag_test_and_set(&a); + std::atomic_flag_notify_one(&a); + }); + std::atomic_flag_wait(&a, false); + t.join(); +} + +int +main() +{ + test01(); + test02(); } -- 2.31.1