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.133.124]) by sourceware.org (Postfix) with ESMTP id 30402399CC39 for ; Fri, 16 Jul 2021 17:15:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 30402399CC39 Received: from mail-qv1-f69.google.com (mail-qv1-f69.google.com [209.85.219.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-384-fkKkbpdJM8Obn1oDmVKnoA-1; Fri, 16 Jul 2021 13:15:31 -0400 X-MC-Unique: fkKkbpdJM8Obn1oDmVKnoA-1 Received: by mail-qv1-f69.google.com with SMTP id q11-20020ad4434b0000b029030449450d37so716724qvs.14 for ; Fri, 16 Jul 2021 10:15:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=Wvo4UaFhyVSKJliHUkyyka/lbVlr95PNLK3+EbeGsK4=; b=p51MQZ+s7hIwaZdCiE/YZVZsM7xRu96iReNu6XkJGTBvTSjUAuNnHyWgS33kfW1ka5 RgC0TJ+pi+EunrHOGhZXIe7OYOfQXNoaMhc1cZIiBK3RnLi6mKRz1HxrlddsE1uKTUaH GKwtEx58eDVNbGatPm+HQpyu1ZMJ9HnQGihS+R9uFRVQgb64sOn+HWPgZfsSbNQgHOs6 jvEeq2XUj38EI9HN4+aOAL4ROAMMIi21uRh317+cBHQS+SyL73/NSuudSEs/gsZY/NNY BEVT+BuyDJtmLa9uZsMtra0ZLJnXoTR68RpTf/FSCJSMe1CLRpxXAWreiWHlyrQ9vUC9 nJXw== X-Gm-Message-State: AOAM530bDAksW95FmPty19u3cuGQ2DXdcEE2LXqdQvelLbi5AjyR1iDA tprJMBlyloU1IaKDgxd8yS5Yq54/nmH6D+a0OIzOxypQ8ul2Eyioo+ausx1n8uyzYOcS/IfRGVs AKU/e5BW53ikgMPsHKzLJolk6hCA+I5YIcAw538zxplNmwfUhr2ViZV64pEIy2LhZ8A== X-Received: by 2002:a37:2e86:: with SMTP id u128mr10634053qkh.26.1626455730734; Fri, 16 Jul 2021 10:15:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxBdxHqU51cB5eqzVl+b0GiOhGJi0zZ04FFOtyHPi3+nG5H0nkK/48jf27lLapHP95hwmtMVw== X-Received: by 2002:a37:2e86:: with SMTP id u128mr10634029qkh.26.1626455730463; Fri, 16 Jul 2021 10:15:30 -0700 (PDT) Received: from [10.200.133.122] ([205.143.237.8]) by smtp.gmail.com with ESMTPSA id l4sm4068964qkd.77.2021.07.16.10.15.29 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 16 Jul 2021 10:15:29 -0700 (PDT) Subject: Re: [PATCH] c++: covariant reference return type [PR99664] To: Patrick Palka , gcc-patches@gcc.gnu.org References: <20210715163718.1707452-1-ppalka@redhat.com> From: Jason Merrill Message-ID: Date: Fri, 16 Jul 2021 13:15:26 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210715163718.1707452-1-ppalka@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-13.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, 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-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-List-Received-Date: Fri, 16 Jul 2021 17:15:34 -0000 On 7/15/21 12:37 PM, Patrick Palka wrote: > This implements the wording changes of DR 960 which clarifies that two > reference types are covariant only if they're both lvalue references > or both rvalue references. > > Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look > OK for trunk? OK. > DR 960 > PR c++/99664 > > gcc/cp/ChangeLog: > > * search.c (check_final_overrider): Compare TYPE_REF_IS_RVALUE > when the return types are references. > > gcc/testsuite/ChangeLog: > > * g++.dg/inherit/covariant23.C: New test. > --- > gcc/cp/search.c | 8 +++++++- > gcc/testsuite/g++.dg/inherit/covariant23.C | 14 ++++++++++++++ > 2 files changed, 21 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/g++.dg/inherit/covariant23.C > > diff --git a/gcc/cp/search.c b/gcc/cp/search.c > index af41bfe5835..943671acff8 100644 > --- a/gcc/cp/search.c > +++ b/gcc/cp/search.c > @@ -1948,7 +1948,13 @@ check_final_overrider (tree overrider, tree basefn) > fail = !INDIRECT_TYPE_P (base_return); > if (!fail) > { > - fail = cp_type_quals (base_return) != cp_type_quals (over_return); > + if (cp_type_quals (base_return) != cp_type_quals (over_return)) > + fail = 1; > + > + if (TYPE_REF_P (base_return) > + && (TYPE_REF_IS_RVALUE (base_return) > + != TYPE_REF_IS_RVALUE (over_return))) > + fail = 1; > > base_return = TREE_TYPE (base_return); > over_return = TREE_TYPE (over_return); > diff --git a/gcc/testsuite/g++.dg/inherit/covariant23.C b/gcc/testsuite/g++.dg/inherit/covariant23.C > new file mode 100644 > index 00000000000..b27be15ef45 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/inherit/covariant23.C > @@ -0,0 +1,14 @@ > +// PR c++/99664 > +// { dg-do compile { target c++11 } } > + > +struct Res { }; > + > +struct A { > + virtual Res &&f(); > + virtual Res &g(); > +}; > + > +struct B : A { > + Res &f() override; // { dg-error "return type" } > + Res &&g() override; // { dg-error "return type" } > +}; >