From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x529.google.com (mail-ed1-x529.google.com [IPv6:2a00:1450:4864:20::529]) by sourceware.org (Postfix) with ESMTPS id ED7483858C52; Fri, 9 Sep 2022 18:26:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org ED7483858C52 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-x529.google.com with SMTP id b35so3839265edf.0; Fri, 09 Sep 2022 11:26:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date; bh=/Ag3CM5w64vk+zFZOLTyttkvHzKtc5Ix6rs/PoSGqpo=; b=TKOGVmj7k0l9fzx5tOXO0VhqEHYIGdIw42l3+eSg+/I3b6m0/tDIHlOxXWBJR7OmUP mb654AStoBnwcPDzOv5OiIgxs6FG4ZGBeueI5MSsOjDbyq1dxcI3UEXbfueG5pbTKn5L E3ueSUCx78x384wiXxZRA3Jc1v3/PIut59lAOssCmTn36sk9Kz+Yv6H6aU51LdAkISDO Mv9uz0/6+bwtCOb7V/XZVvd4P+iGgXz5B9fPYrRF/hg3SpK79DsMxWtIJCmuVk8aOm9C 1pRj2uFrGz6/GN+/qjoDK3ubAglPq6XZrKUUfQXaHxJ153bi66a+F6r5ifP+dWZuuGVf hXfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date; bh=/Ag3CM5w64vk+zFZOLTyttkvHzKtc5Ix6rs/PoSGqpo=; b=SLZ+AR8TAnb+vflAEGpcOMwcslejSJpZtdigyps1EwvpgGKKPYNy/i/oXRu0vp1mmR h84FFtt3VyJlHdPIY6V5cQUvetBQP2sIEJpdbt5kFQZCj/N/Cgv3PuJ2/ZAECrpZkAGE mQhlzPlbhHW6K2YDJkw3DQ5Ia+GRHfOf1/RDM61S+FgwvTAHtVshsjmeQd7fEny5El2V o/HE906YcVd2SrjRr80Jr8yVFGOOkHQJ6Ik/GrUsYYbfS0PzLrJzgdUIjqrCk20McwHV /cJeYXl067YULD2prLdnMAOaOAB4cGxU9DP5DEmPf+uXJMb5rFzhyTq+m3ScouUxOSH5 uBMg== X-Gm-Message-State: ACgBeo0a27Dpps2IBo93d2TT2Azb+rb/OSNZRVx/EsxJY065Sp0qx/Z6 LScq+v0FD6Rj7kxEd9/8GijWIsuBRE/6fZqYWho= X-Google-Smtp-Source: AA6agR7YiU+PwdeuCgRjqh2RIDN5J6HD5LdKaaUxANS8iBXZtdlkpBifULcEWGbJyOaTO5q/TUamJA9QKkcumFq3IOw= X-Received: by 2002:a05:6402:44c:b0:445:f2f1:4add with SMTP id p12-20020a056402044c00b00445f2f14addmr12716069edw.257.1662747979652; Fri, 09 Sep 2022 11:26:19 -0700 (PDT) MIME-Version: 1.0 References: <20220909172446.1546805-1-ppalka@redhat.com> In-Reply-To: <20220909172446.1546805-1-ppalka@redhat.com> From: Jonathan Wakely Date: Fri, 9 Sep 2022 19:26:07 +0100 Message-ID: Subject: Re: [PATCH 1/3] libstdc++: Fix zip_view's operator- for integer-class difference type [PR106766] To: Patrick Palka Cc: gcc-patches , "libstdc++" Content-Type: multipart/alternative; boundary="000000000000adad7d05e842aea9" X-Spam-Status: No, score=-6.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000adad7d05e842aea9 Content-Type: text/plain; charset="UTF-8" On Fri, 9 Sep 2022, 18:25 Patrick Palka via Libstdc++, < libstdc++@gcc.gnu.org> wrote: > make_unsigned_t can't give us the unsigned version of an integer-class > difference type, so use __make_unsigned_like_t / __to_unsigned_like > instead. > OK, thanks > PR libstdc++/106766 > > libstdc++-v3/ChangeLog: > > * include/std/ranges (zip_view::_Iterator::operator-): Use > __to_unsigned_like instead of make_unsigned_t. > (zip_view::_Sentinel::operator-): Likewise. > * testsuite/std/ranges/zip/1.cc (test04): New test. > --- > libstdc++-v3/include/std/ranges | 8 ++++---- > libstdc++-v3/testsuite/std/ranges/zip/1.cc | 14 ++++++++++++++ > 2 files changed, 18 insertions(+), 4 deletions(-) > > diff --git a/libstdc++-v3/include/std/ranges > b/libstdc++-v3/include/std/ranges > index 2b5cb0531f0..2b8fec3c386 100644 > --- a/libstdc++-v3/include/std/ranges > +++ b/libstdc++-v3/include/std/ranges > @@ -4657,8 +4657,8 @@ namespace views::__adaptor > return ranges::min({difference_type(std::get<_Is>(__x._M_current) > - > std::get<_Is>(__y._M_current))...}, > ranges::less{}, > - [](difference_type __i) -> > make_unsigned_t { > - return __i < 0 ? -__i : __i; > + [](difference_type __i) { > + return __detail::__to_unsigned_like(__i < 0 ? > -__i : __i); > }); > }(make_index_sequence{}); > } > @@ -4726,8 +4726,8 @@ namespace views::__adaptor > return [&](index_sequence<_Is...>) { > return ranges::min({_Ret(std::get<_Is>(__x._M_current) - > std::get<_Is>(__y._M_end))...}, > ranges::less{}, > - [](_Ret __i) -> make_unsigned_t<_Ret> { > - return __i < 0 ? -__i : __i; > + [](_Ret __i) { > + return __detail::__to_unsigned_like(__i < 0 ? > -__i : __i); > }); > }(make_index_sequence{}); > } > diff --git a/libstdc++-v3/testsuite/std/ranges/zip/1.cc > b/libstdc++-v3/testsuite/std/ranges/zip/1.cc > index 0113efdb537..f868c97cb69 100644 > --- a/libstdc++-v3/testsuite/std/ranges/zip/1.cc > +++ b/libstdc++-v3/testsuite/std/ranges/zip/1.cc > @@ -102,10 +102,24 @@ test03() > return true; > } > > +constexpr bool > +test04() > +{ > + // PR libstdc++/106766 > + auto r = views::zip(views::iota(__int128(0), __int128(1))); > + auto i = r.begin(); > + auto s = r.end(); > + VERIFY( s - i == 1 ); > + VERIFY( i + 1 - i == 1 ); > + > + return true; > +} > + > int > main() > { > static_assert(test01()); > static_assert(test02()); > static_assert(test03()); > + static_assert(test04()); > } > -- > 2.37.3.518.g79f2338b37 > > --000000000000adad7d05e842aea9--