From patchwork Fri Feb 11 16:51:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Palka X-Patchwork-Id: 1591739 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=RBdmzdJy; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JwKRG6K57z9sFq for ; Sat, 12 Feb 2022 03:52:25 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E23FF3858003 for ; Fri, 11 Feb 2022 16:52:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E23FF3858003 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1644598342; bh=TV4l9qCkji2tLnMfEflDkq+DPe11o/68xTFWv2hfE3Y=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=RBdmzdJy1FnDxvSGIQ3h18ekDQ/AVJODiUt8WIP8R+XRRMKIwYmMUxsbXFcV6/Tr3 6xQ/StYNjjZeQu1L6aAj+F3nUdN89nOrUYYWd5ZkejVtUmucE5yoMMSTL6LyH4dxvc kbMDy0YE+xGpRE1nV8F4ePwqKlPCQqHmf7AWlDN4= 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 2684A3858D1E for ; Fri, 11 Feb 2022 16:52:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 2684A3858D1E Received: from mail-qv1-f71.google.com (mail-qv1-f71.google.com [209.85.219.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-202-m3RUyn2nOJ-PbninptWWPQ-1; Fri, 11 Feb 2022 11:52:02 -0500 X-MC-Unique: m3RUyn2nOJ-PbninptWWPQ-1 Received: by mail-qv1-f71.google.com with SMTP id 6-20020a0562140d4600b004244d191fd4so6750188qvr.0 for ; Fri, 11 Feb 2022 08:52:02 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=TV4l9qCkji2tLnMfEflDkq+DPe11o/68xTFWv2hfE3Y=; b=qNBmbRyXXg0g0N0/zwy0S1JTxgVTcHkOl2nky90daUEmUy5x+9aEr5lCiGhXaw0mae 2B7mXw7fI+QmIVjIVKTJLKZsQEWHzv7NY8zln5wZ65TOTgJzjI/xnIkjOiXgoiF08kcA 4HfODT0Eywjdv/stWEMpA97M64INXW5c0x9e//SWGtFwABfGsKcTOU8xQjsK3b0VE9X+ +mNxbLk8n9bEllfap0wz6Bel/uRcYXxHWMiYt0ib5n+65Or9pqJWxtHQwTQQSXloykSu xR7ewpHyC8zc6mhLNIHsgcO6VULMqHMM2Tru/14FgltBUFdyvk4qU4duQIdYIW/7W8jK K42w== X-Gm-Message-State: AOAM533h9PIc9XPE+gsOPZXEP6zjO+bZMiHy3rn8gmJ6QVE6bb3CWkM8 38u1HnCNG1GPGHOd4DHf9nUjkrDQ0gUATostBrL3nqmMQ2+aBi832Esh/+vGmc5FDXINAlwmdtr CJ77JQT2L6ZpgexRphwQbJlj724hYFo5t5VolbsvHRIuKpJZys/hbdbZKqXizupgGvso= X-Received: by 2002:a05:620a:170b:: with SMTP id az11mr1244079qkb.262.1644598321231; Fri, 11 Feb 2022 08:52:01 -0800 (PST) X-Google-Smtp-Source: ABdhPJwYnp38UDKa+0g+KqMmuTaPPock7n+15FdWrq0XRFmHkbSMN5wiArQeghQ2y3sbgZN4NervVA== X-Received: by 2002:a05:620a:170b:: with SMTP id az11mr1244061qkb.262.1644598320868; Fri, 11 Feb 2022 08:52:00 -0800 (PST) Received: from localhost.localdomain (ool-18e40894.dyn.optonline.net. [24.228.8.148]) by smtp.gmail.com with ESMTPSA id l13sm5681494qtx.32.2022.02.11.08.52.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Feb 2022 08:52:00 -0800 (PST) To: gcc-patches@gcc.gnu.org Subject: [PATCH] libstdc++: Back out some changes in P2325R3 backport [PR103904] Date: Fri, 11 Feb 2022 11:51:57 -0500 Message-Id: <20220211165157.3159659-1-ppalka@redhat.com> X-Mailer: git-send-email 2.35.1.102.g2b9c120970 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-14.3 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE 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-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: Patrick Palka via Gcc-patches From: Patrick Palka Reply-To: Patrick Palka Cc: libstdc++@gcc.gnu.org Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" In the P2325R3 backport r11-9555 the relaxation of the constraints on the partial specialization of __box (which is semantically equivalent to the primary template, only more space efficient) means some specializations of __box will now use the partial specialization instead of the primary template, which (IIUC) constitutes an ABI change unsuitable for a release branch. This patch reverts this constraint change, which isn't needed for correctness anyway. Similarly the change to use __non_propagating_cache for the data member split_view::_M_current (so that it's always default-initializable) also constitutes an unsuitable ABI change. This patch reverts this change too, and instead further constrains split_view's default constructor to require that we can default-initialize _M_current. PR libstdc++/103904 libstdc++-v3/ChangeLog: * include/std/ranges (__detail::__box): Revert r11-9555 changes to the constraints on the partial specialization and the now-unnecessary member additions. (__detail::__non_propagating_cache::operator=): Remove now-unused overload added by r11-9555. (split_view::_OuterIter::__current): Adjust after reverting the r11-9555 change to the type of _M_current. (split_view::_M_current): Revert r11-9555 change to its type. (split_view::split_view): Constrain the default ctor further. * testsuite/std/ranges/adaptors/detail/copyable_box.cc: Disable now-irrelevant test for the r11-9555 changes to the partial specialization of __box. --- libstdc++-v3/include/std/ranges | 54 +++---------------- .../ranges/adaptors/detail/copyable_box.cc | 4 ++ 2 files changed, 10 insertions(+), 48 deletions(-) diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index 03c6275801f..bf31e4be500 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -144,8 +144,7 @@ namespace ranges // std::optional. It provides just the subset of the primary template's // API that we currently use. template<__boxable _Tp> - requires copyable<_Tp> || (is_nothrow_move_constructible_v<_Tp> - && is_nothrow_copy_constructible_v<_Tp>) + requires copyable<_Tp> struct __box<_Tp> { private: @@ -174,38 +173,6 @@ namespace ranges : _M_value(std::forward<_Args>(__args)...) { } - __box(const __box&) = default; - __box(__box&&) = default; - __box& operator=(const __box&) requires copyable<_Tp> = default; - __box& operator=(__box&&) requires copyable<_Tp> = default; - - // When _Tp is nothrow_copy_constructible but not copy_assignable, - // copy assignment is implemented via destroy-then-copy-construct. - constexpr __box& - operator=(const __box& __that) noexcept - { - static_assert(is_nothrow_copy_constructible_v<_Tp>); - if (this != std::__addressof(__that)) - { - _M_value.~_Tp(); - std::construct_at(std::__addressof(_M_value), *__that); - } - return *this; - } - - // Likewise for move assignment. - constexpr __box& - operator=(__box&& __that) noexcept - { - static_assert(is_nothrow_move_constructible_v<_Tp>); - if (this != std::__addressof(__that)) - { - _M_value.~_Tp(); - std::construct_at(std::__addressof(_M_value), std::move(*__that)); - } - return *this; - } - constexpr bool has_value() const noexcept { return true; }; @@ -1180,16 +1147,6 @@ namespace views::__adaptor return *this; } - constexpr __non_propagating_cache& - operator=(_Tp __val) - { - this->_M_reset(); - std::construct_at(std::__addressof(this->_M_payload._M_payload), - std::in_place, std::move(__val)); - this->_M_payload._M_engaged = true; - return *this; - } - constexpr _Tp& operator*() noexcept { return this->_M_get(); } @@ -2886,7 +2843,7 @@ namespace views::__adaptor if constexpr (forward_range<_Vp>) return _M_current; else - return *_M_parent->_M_current; + return _M_parent->_M_current; } constexpr auto& @@ -2895,7 +2852,7 @@ namespace views::__adaptor if constexpr (forward_range<_Vp>) return _M_current; else - return *_M_parent->_M_current; + return _M_parent->_M_current; } _Parent* _M_parent = nullptr; @@ -3143,13 +3100,14 @@ namespace views::__adaptor // XXX: _M_current is "present only if !forward_range" [[no_unique_address]] __detail::__maybe_present_t, - __detail::__non_propagating_cache>> _M_current; + iterator_t<_Vp>> _M_current; _Vp _M_base = _Vp(); public: split_view() requires (default_initializable<_Vp> - && default_initializable<_Pattern>) + && default_initializable<_Pattern> + && default_initializable>) = default; constexpr diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/detail/copyable_box.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/detail/copyable_box.cc index fa6d4d56816..2078d442447 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/detail/copyable_box.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/detail/copyable_box.cc @@ -101,6 +101,9 @@ test02() __box> x1(std::in_place, 0, 0); } +#if 0 +// On the 11 branch, the partial specialization of __box admits only copyable types +// so this test doesn't apply. constexpr bool test03() { @@ -142,3 +145,4 @@ test03() return true; } static_assert(test03()); +#endif