From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 103E43858CDA for ; Mon, 12 Sep 2022 11:04:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 103E43858CDA Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1662980697; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=oTH2zJ1VeW0dUFBQDo/Vf6mFIl4xzngFzB/UL04lMYE=; b=XvvN8J8rrfXUBu/S4DxmC93ZqLe23+H5Ze9Rumet8GvNIm+NP6NZ8Rd5FpuA0pb7MpSTyi qC5LwW/JvdX8XfZQBs+FzlxCSLtEhOV+O57738SNVvhYPRVtimmdCl0HyO6y4Ha8M+SZ19 QIfRcmPe+8ZpjGP603GvL/IQl81du9c= Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-335-qJwdXbFDPcOzeZBDlQOPew-1; Mon, 12 Sep 2022 07:04:56 -0400 X-MC-Unique: qJwdXbFDPcOzeZBDlQOPew-1 Received: by mail-qt1-f199.google.com with SMTP id cf25-20020a05622a401900b0035a6ef450e9so6825570qtb.9 for ; Mon, 12 Sep 2022 04:04:55 -0700 (PDT) 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=oTH2zJ1VeW0dUFBQDo/Vf6mFIl4xzngFzB/UL04lMYE=; b=cmefe/igML+TVtpG5x+xNypLmpzuLtvvPwX6ZUdB7yTq1F2ANByjPtLP7cu5N/6iS/ skfUatbHEUV4XOxpTsQcHnDCPpbtog65tE6wJpYueYuPZ68TZvwz7ttRVBItGe6wgny5 9pTEm+ZYC0Ro8njbM6z3iugoOqAA9fhovAWh7j5tZUowqw4RJS9U68NBRbXIh87hXifZ hDJUpGhgyLiCTOpMnkv9Cy59BZtX7qMeb08mYqNLezBUP9ZjDA2Nl7J0tlgvVcDj233U O2L27zHUm6cn909DBucS+b8IGHPWE6tAL/88PBK0DWVjDpX7uzIB1qo5Rcs44EmkswiG XTJw== X-Gm-Message-State: ACgBeo2SQyprtkwG+GDrtVbjM3SWp2/X9PNadnZ45PgVFb00mPkq9uCd 0gDLU4GqK+CpUX+B7DcpOLVrgnHRGJvrNiN32oBsPeKITqigeMr77bkGyqE8GrHDmENrxvkx5GI 8PVt+eDRnFmarThPr04w478aTtYJc0AE= X-Received: by 2002:a05:622a:38f:b0:35b:b8e7:82ef with SMTP id j15-20020a05622a038f00b0035bb8e782efmr871643qtx.647.1662980695544; Mon, 12 Sep 2022 04:04:55 -0700 (PDT) X-Google-Smtp-Source: AA6agR7Txkre2AGJNnPuO2XVK26FwNwyV/PhkVd6DLV8GIeZP2lMaYozL26dzvrD8Zhi17+TwnADYNxDKkWIVRLXpww= X-Received: by 2002:a05:622a:38f:b0:35b:b8e7:82ef with SMTP id j15-20020a05622a038f00b0035bb8e782efmr871615qtx.647.1662980695198; Mon, 12 Sep 2022 04:04:55 -0700 (PDT) MIME-Version: 1.0 References: <20220908183010.3290473-1-jwakely@redhat.com> In-Reply-To: From: Jonathan Wakely Date: Mon, 12 Sep 2022 12:04:44 +0100 Message-ID: Subject: Re: [committed] libstdc++: Find make_error_code and make_error_condition via ADL only To: =?UTF-8?Q?Daniel_Kr=C3=BCgler?= Cc: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="0000000000009b6ede05e878ddf4" X-Spam-Status: No, score=-12.6 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.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --0000000000009b6ede05e878ddf4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, 12 Sept 2022 at 11:55, Daniel Kr=C3=BCgler wrote: > > Am Do., 8. Sept. 2022 um 20:30 Uhr schrieb Jonathan Wakely via > Libstdc++ : > > > > Tested powerpc64le-linux, pushed to trunk. > > > > -- >8 -- > > > > The new proposed resolution for LWG 3629 says that std::error_code and > > std::error_condition should only use ADL to find their customization > > points. This means we need to use a poison pill to prevent lookup from > > finding overloads in the enclosing namespaces. > > > > We can also remove the forward declarations of std::make_error_code and > > std::make_error_condition, because they aren't needed now. ADL can find > > them anyway (when std is an associated namespace), and unqualified name > > lookup will not (and should not) find them. > > > > libstdc++-v3/ChangeLog: > > > > * include/std/system_error (__adl_only::make_error_code): Add > > deleted function. > > (__adl_only::make_error_condition): Likewise. > > (error_code::error_code(ErrorCodeEnum)): Add using-declaration > > for deleted function. > > (error_condition::error_condition(ErrorConditionEnum)): > > Likewise. > > * testsuite/19_diagnostics/error_code/cons/lwg3629.cc: New test= . > > * testsuite/19_diagnostics/error_condition/cons/lwg3629.cc: New= test. > > --- > [..] > > +// { dg-do compile { target c++11 } } > > + > > +// 3629. make_error_code and make_error_condition are customization po= ints > > +// Verify that make_error_code is looked up using ADL only. > > + > > +namespace user > > +{ > > + struct E1; > > +} > > + > > +// N.B. not in associated namespace of E1, and declared before . > > +user::E1 make_error_code(user::E1); > > + > > +#include // declares std::make_error_code(future_errc) > > +#include > > + > > +namespace user > > +{ > > + struct E1 > > + { > > + operator std::error_code() const; > > + }; > > + > > + struct E2 > > + { > > + operator std::future_errc() const; > > + }; > > + > > + struct E3 > > + { > > + operator std::errc() const; > > + }; > > +} > > + > > +template<> struct std::is_error_code_enum : std::true_type {= }; > > +template<> struct std::is_error_code_enum : std::true_type {= }; > > +template<> struct std::is_error_code_enum : std::true_type {= }; > > + > > +// ::make_error_code(E1) should not be found by name lookup. > > +std::error_code e1( user::E1{} ); // { dg-error "here" } > > + > > +// std::make_error_code(errc) should not be found by name lookup. > > +std::error_code e2( user::E2{} ); // { dg-error "here" } > > (1) Unless I'm misunderstanding something here, the comment above > doesn't match here, it should mention (std::)future_errc instead. > > > +// std::make_error_code(future_errc) should not be found by name looku= p. > > +std::error_code e3( user::E3{} ); // { dg-error "here" } > > (2) Unless I'm misunderstanding something here, the comment above > doesn't match here, it should mention (std::)errc instead. > > > +// { dg-error "use of deleted function" "" { target *-*-* } 0 } > > diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_condition/cons= /lwg3629.cc b/libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/lw= g3629.cc > > new file mode 100644 > > index 00000000000..e34b53de8a1 > > --- /dev/null > > +++ b/libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/lwg362= 9.cc > > @@ -0,0 +1,48 @@ > > +// { dg-do compile { target c++11 } } > > + > > +// 3629. make_error_code and make_error_condition are customization po= ints > > +// Verify that make_error_condition is looked up using ADL only. > > + > > +namespace user > > +{ > > + struct E1; > > +} > > + > > +// N.B. not in associated namespace of E1, and declared before . > > +user::E1 make_error_condition(user::E1); > > + > > +#include // declares std::make_error_condition(future_errc) > > +#include > > + > > +namespace user > > +{ > > + struct E1 > > + { > > + operator std::error_code() const; > > + }; > > + > > + struct E2 > > + { > > + operator std::future_errc() const; > > + }; > > + > > + struct E3 > > + { > > + operator std::errc() const; > > + }; > > +} > > + > > +template<> struct std::is_error_condition_enum : std::true_t= ype { }; > > +template<> struct std::is_error_condition_enum : std::true_t= ype { }; > > +template<> struct std::is_error_condition_enum : std::true_t= ype { }; > > + > > +// ::make_error_condition(E1) should not be found by name lookup. > > +std::error_condition e1( user::E1{} ); // { dg-error "here" } > > + > > +// std::make_error_condition(errc) should not be found by name lookup. > > +std::error_condition e2( user::E2{} ); // { dg-error "here" } > > Ditto here (1) > > > +// std::make_error_condition(future_errc) should not be found by name = lookup. > > +std::error_condition e3( user::E3{} ); // { dg-error "here" } > > Ditto here (2) Good catch, thanks. Fixed by the attached patch, tested x86_64-linux and pushed to trunk. --0000000000009b6ede05e878ddf4 Content-Type: text/plain; charset="US-ASCII"; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7ynrcke0 Y29tbWl0IGMwOTJkODk0MjY1ZjNkYjU5MDU4NTgwNGMzMGMxYWUzY2I3YjM3NzMKQXV0aG9yOiBK b25hdGhhbiBXYWtlbHkgPGp3YWtlbHlAcmVkaGF0LmNvbT4KRGF0ZTogICBNb24gU2VwIDEyIDEy OjAyOjI5IDIwMjIKCiAgICBsaWJzdGRjKys6IEZpeCBjb21tZW50cyBpbiB0ZXN0cyB0byBtYXRj aCBjb2RlCiAgICAKICAgIGxpYnN0ZGMrKy12My9DaGFuZ2VMb2c6CiAgICAKICAgICAgICAgICAg KiB0ZXN0c3VpdGUvMTlfZGlhZ25vc3RpY3MvZXJyb3JfY29kZS9jb25zL2x3ZzM2MjkuY2M6IEZp eAogICAgICAgICAgICBjb21tZW50cy4KICAgICAgICAgICAgKiB0ZXN0c3VpdGUvMTlfZGlhZ25v c3RpY3MvZXJyb3JfY29uZGl0aW9uL2NvbnMvbHdnMzYyOS5jYzoKICAgICAgICAgICAgTGlrZXdp c2UuCgpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8xOV9kaWFnbm9zdGljcy9l cnJvcl9jb2RlL2NvbnMvbHdnMzYyOS5jYyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMTlfZGlh Z25vc3RpY3MvZXJyb3JfY29kZS9jb25zL2x3ZzM2MjkuY2MKaW5kZXggYjFlMGI3ZjBjODEuLjcw ZmE1ZTgwNTAzIDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvdGVzdHN1aXRlLzE5X2RpYWdub3N0 aWNzL2Vycm9yX2NvZGUvY29ucy9sd2czNjI5LmNjCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3Vp dGUvMTlfZGlhZ25vc3RpY3MvZXJyb3JfY29kZS9jb25zL2x3ZzM2MjkuY2MKQEAgLTM5LDEwICsz OSwxMCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBzdGQ6OmlzX2Vycm9yX2NvZGVfZW51bTx1c2VyOjpF Mz4gOiBzdGQ6OnRydWVfdHlwZSB7IH07CiAvLyA6Om1ha2VfZXJyb3JfY29kZShFMSkgc2hvdWxk IG5vdCBiZSBmb3VuZCBieSBuYW1lIGxvb2t1cC4KIHN0ZDo6ZXJyb3JfY29kZSBlMSggdXNlcjo6 RTF7fSApOyAvLyB7IGRnLWVycm9yICJoZXJlIiB9CiAKLS8vIHN0ZDo6bWFrZV9lcnJvcl9jb2Rl KGVycmMpIHNob3VsZCBub3QgYmUgZm91bmQgYnkgbmFtZSBsb29rdXAuCisvLyBzdGQ6Om1ha2Vf ZXJyb3JfY29kZShmdXR1cmVfZXJyYykgc2hvdWxkIG5vdCBiZSBmb3VuZCBieSBuYW1lIGxvb2t1 cC4KIHN0ZDo6ZXJyb3JfY29kZSBlMiggdXNlcjo6RTJ7fSApOyAvLyB7IGRnLWVycm9yICJoZXJl IiB9CiAKLS8vIHN0ZDo6bWFrZV9lcnJvcl9jb2RlKGZ1dHVyZV9lcnJjKSBzaG91bGQgbm90IGJl IGZvdW5kIGJ5IG5hbWUgbG9va3VwLgorLy8gc3RkOjptYWtlX2Vycm9yX2NvZGUoZXJyYykgc2hv dWxkIG5vdCBiZSBmb3VuZCBieSBuYW1lIGxvb2t1cC4KIHN0ZDo6ZXJyb3JfY29kZSBlMyggdXNl cjo6RTN7fSApOyAvLyB7IGRnLWVycm9yICJoZXJlIiB9CiAKIC8vIHsgZGctZXJyb3IgInVzZSBv ZiBkZWxldGVkIGZ1bmN0aW9uIiAiIiB7IHRhcmdldCAqLSotKiB9IDAgfQpkaWZmIC0tZ2l0IGEv bGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8xOV9kaWFnbm9zdGljcy9lcnJvcl9jb25kaXRpb24vY29u cy9sd2czNjI5LmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8xOV9kaWFnbm9zdGljcy9lcnJv cl9jb25kaXRpb24vY29ucy9sd2czNjI5LmNjCmluZGV4IGUzNGI1M2RlOGExLi41NjJhOTlhZWUz YiAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8xOV9kaWFnbm9zdGljcy9lcnJv cl9jb25kaXRpb24vY29ucy9sd2czNjI5LmNjCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUv MTlfZGlhZ25vc3RpY3MvZXJyb3JfY29uZGl0aW9uL2NvbnMvbHdnMzYyOS5jYwpAQCAtMzksMTAg KzM5LDEwIEBAIHRlbXBsYXRlPD4gc3RydWN0IHN0ZDo6aXNfZXJyb3JfY29uZGl0aW9uX2VudW08 dXNlcjo6RTM+IDogc3RkOjp0cnVlX3R5cGUgeyB9OwogLy8gOjptYWtlX2Vycm9yX2NvbmRpdGlv bihFMSkgc2hvdWxkIG5vdCBiZSBmb3VuZCBieSBuYW1lIGxvb2t1cC4KIHN0ZDo6ZXJyb3JfY29u ZGl0aW9uIGUxKCB1c2VyOjpFMXt9ICk7IC8vIHsgZGctZXJyb3IgImhlcmUiIH0KIAotLy8gc3Rk OjptYWtlX2Vycm9yX2NvbmRpdGlvbihlcnJjKSBzaG91bGQgbm90IGJlIGZvdW5kIGJ5IG5hbWUg bG9va3VwLgorLy8gc3RkOjptYWtlX2Vycm9yX2NvbmRpdGlvbihmdXR1cmVfZXJyYykgc2hvdWxk IG5vdCBiZSBmb3VuZCBieSBuYW1lIGxvb2t1cC4KIHN0ZDo6ZXJyb3JfY29uZGl0aW9uIGUyKCB1 c2VyOjpFMnt9ICk7IC8vIHsgZGctZXJyb3IgImhlcmUiIH0KIAotLy8gc3RkOjptYWtlX2Vycm9y X2NvbmRpdGlvbihmdXR1cmVfZXJyYykgc2hvdWxkIG5vdCBiZSBmb3VuZCBieSBuYW1lIGxvb2t1 cC4KKy8vIHN0ZDo6bWFrZV9lcnJvcl9jb25kaXRpb24oZXJyYykgc2hvdWxkIG5vdCBiZSBmb3Vu ZCBieSBuYW1lIGxvb2t1cC4KIHN0ZDo6ZXJyb3JfY29uZGl0aW9uIGUzKCB1c2VyOjpFM3t9ICk7 IC8vIHsgZGctZXJyb3IgImhlcmUiIH0KIAogLy8geyBkZy1lcnJvciAidXNlIG9mIGRlbGV0ZWQg ZnVuY3Rpb24iICIiIHsgdGFyZ2V0ICotKi0qIH0gMCB9Cg== --0000000000009b6ede05e878ddf4--