From patchwork Fri Sep 24 11:15:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: nick huang X-Patchwork-Id: 45413 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 C3608385842D for ; Fri, 24 Sep 2021 11:16:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C3608385842D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1632482175; bh=54ARZCEzOfLcmqrpUOfs3/uEmlOblev/o7W1NHe8fNI=; h=To:Subject:Date:References:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=yyqefbCxes/3fwTbfNcmMEgo6DKAfgdm8pRiEIXa4AJc1SvGuESGZKvuYCkM5fNWs G7STJcptprducugZxJ0FlMh3bTI7Ep+Gb4G1iz4z29VW+lI782oBZhpQmdPTTC7YuV LCRDGQSetbGVVBrEX1a3gAuNrrCIaMffWL2KJtKk= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1anam02olkn2032.outbound.protection.outlook.com [40.92.44.32]) by sourceware.org (Postfix) with ESMTPS id A3D943858402 for ; Fri, 24 Sep 2021 11:15:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A3D943858402 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MEF7/mWwFWlY7F6Cm21Gj7VKoQIldV8Vv7Y8FadfEdwewBrWVylsXw6pDyKqMTiECRjw370gSYs9YnHcW+EusJngilBltXj3ILVSfwmAiSdqAwDNtocaKNlq+gblm1cAH9ovy5g4EHOp+6RilOnSIhadWDUWKf0VWXWnuJwdTU/e/IdCRA9nqZY6q/bsklzUuyTPkjdrVYQWBjRMoMPJMQ9GJGHYzUtdfaMbpLGjlyYwdhAzKiEOi3Z+GUIn0AQtuLcaEDZ7AK7aSV5iad1P/cxRnchpOMQC0Ks81izsHMMb2AVbtggKjpp53Ytu+tneB8++YoMug6f2s1ABNYd6Qw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=54ARZCEzOfLcmqrpUOfs3/uEmlOblev/o7W1NHe8fNI=; b=NW8vYAVyysArY28jiNhdXM+nzSSDSaqWPKEbDel0gXM/WMZMIRM//O+OqyoUGIfE/8wWHsUyAgFcIjryPssH2RB3CJU/WP0lNnYWqBViBv5uZndHaLh6vOphAXkskYBQIrjQXirf8YyGsrSevfZ3OP3ZrTCYw8Aw7pPZnz61rlLRSzWrCLykDsBUpTXrpIlUMGhdGCj00/LwNe+GsH8haIAEAA/eDoZe5g8g9nHFEUQwA5yatPmlbuI7vniwjxKb4c/Gr2u80rZE4RXmrEo274SZ18awurZ2xP/Y+8mMkju/nfq/dIM3OSjBDacJTXcH5a0k5FXAPl01FH7cD1PYXg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from DM5PR0501MB3733.namprd05.prod.outlook.com (2603:10b6:4:80::23) by DM5PR05MB2971.namprd05.prod.outlook.com (2603:10b6:3:55::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.9; Fri, 24 Sep 2021 11:15:44 +0000 Received: from DM5PR0501MB3733.namprd05.prod.outlook.com ([fe80::80fb:3d56:dd10:755d]) by DM5PR0501MB3733.namprd05.prod.outlook.com ([fe80::80fb:3d56:dd10:755d%7]) with mapi id 15.20.4544.018; Fri, 24 Sep 2021 11:15:44 +0000 To: "gcc-patches@gcc.gnu.org" Subject: *PING* Re: [PATCH] c++: Suppress error when cv-qualified reference is introduced by typedef [PR101783] Thread-Topic: *PING* Re: [PATCH] c++: Suppress error when cv-qualified reference is introduced by typedef [PR101783] Thread-Index: AQHXnAN2D8Py3k0ugESw1r2jCY2ug6uzMtTd Date: Fri, 24 Sep 2021 11:15:44 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-CA, en-US Content-Language: en-CA X-MS-Has-Attach: X-MS-TNEF-Correlator: suggested_attachment_session_id: 852f5637-1842-1f51-9f58-ee2abf2b9dc6 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [Px3W22lDeAnjntvwPGUFccXu5m0KuofA] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 1e47e4f1-73a0-4b90-900e-08d97f4ca710 x-ms-traffictypediagnostic: DM5PR05MB2971: x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 2vC7M1kZpPml0DOZnO5+bKtatc3KCWDp0jxlK3x0cAYzpKGYmuymdwBtyMDe59Y1l74q6TzJ2s8YcYyXwJvZyP1+QB56L0MVxZRO4KQ3UjoS4fDbcH7xhFoUxWayBGNfnZx9T+ukolo7QmF7E7TxG6phYzgDs8u24dwIRozAdaSnC2VUK8d2OFMa+FfsrUcyH+NkWVBFWQuW57nGkeuTTyh26jhB7T9qd9XPfpRladvn8YMnrXq1EamXrDW9SPuj5Nc2pwJ1eYXY7kmG5AO8cK5jttHjXtvLzrhSLOlJqH4ILIpFAHihWICTGdCpev+JRxuX5Gdc+eNuyliLOG/iHxFiM3e6fyM77Z39Tr2QdjGA+L8wllobdeb5uEMhvvF/zHgPtIu4amcgCMY17nriZC1YYT6qJDO8ds8hXxi6gMLgjVnylrceO93SPTUzKdURMej1NyoQK3f4xIzEsE1XSW+NYSbgDxGiHUn85hn0cyY= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: tJczY3R2TJ5N8YogvFXJBV0OntgHhrtlawtmRBiffR68gqlhIXmYvITPCq/wc2/Ai3VuRCOCRJMCU2botcLDkPulMV8i6ZBt8ggLduRyYAG3+awcCM+mZxjwraq3xerpci19pNKzN9olqFFUF8SVng== x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-3174-8-msonline-outlook-e6bda.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM5PR0501MB3733.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 1e47e4f1-73a0-4b90-900e-08d97f4ca710 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Sep 2021 11:15:44.6548 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR05MB2971 X-Spam-Status: No, score=-9.2 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, 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-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: nick huang via Gcc-patches From: nick huang Reply-To: nick huang Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Reference with cv-qualifiers should be ignored instead of causing an error because standard accepts cv-qualified references introduced by typedef which is ignored. Therefore, the fix prevents GCC from reporting error by not setting variable "bad_quals" in case the reference is introduced by typedef. Still the cv-qualifier is silently ignored. Here I quote spec (https://timsong-cpp.github.io/cppwp/dcl.ref#1): "Cv-qualified references are ill-formed except when the cv-qualifiers are introduced through the use of a typedef-name ([dcl.typedef], [temp.param]) or decltype-specifier ([dcl.type.decltype]), in which case the cv-qualifiers are ignored." PR c++/101783 gcc/cp/ChangeLog: 2021-08-27  qingzhe huang          * tree.c (cp_build_qualified_type_real): gcc/testsuite/ChangeLog: 2021-08-27  qingzhe huang          * g++.dg/parse/pr101783.C: New test. diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 8840932dba2..7aa4318a574 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1356,12 +1356,22 @@ cp_build_qualified_type_real (tree type,    /* A reference or method type shall not be cv-qualified.       [dcl.ref], [dcl.fct].  This used to be an error, but as of DR 295       (in CD1) we always ignore extra cv-quals on functions.  */ + +  /* PR 101783 +     Cv-qualified references are ill-formed except when the cv-qualifiers +     are introduced through the use of a typedef-name ([dcl.typedef], +     [temp.param]) or decltype-specifier ([dcl.type.decltype]), +     in which case the cv-qualifiers are ignored. +   */    if (type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)        && (TYPE_REF_P (type)            || FUNC_OR_METHOD_TYPE_P (type)))      { -      if (TYPE_REF_P (type)) +      // do NOT set bad_quals when non-method reference is introduced by typedef. +      if (TYPE_REF_P (type) +         && (!typedef_variant_p (type) || FUNC_OR_METHOD_TYPE_P (type)))          bad_quals |= type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE); +      // non-method reference introduced by typedef is also dropped silently        type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);      }   diff --git a/gcc/testsuite/g++.dg/parse/pr101783.C b/gcc/testsuite/g++.dg/parse/pr101783.C new file mode 100644 index 00000000000..4e0a435dd0b --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/pr101783.C @@ -0,0 +1,5 @@ +template struct A{ +        typedef T& Type; +}; +template void f(const typename A::Type){} +template <> void f(const typename A::Type){}