From patchwork Thu Apr 7 03:26:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 52694 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 DAC973858C54 for ; Thu, 7 Apr 2022 03:27:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DAC973858C54 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1649302063; bh=06dZc4Ay5w5DDHEpntciYHRZMKLXwLJ/CVj0rgRLixg=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=AKETKZIzgz/ONZi/jpqNEWTbtSGto6gM1qigblyQBbdO9/+1nP+ZLSjTWDnIdEFe9 WP15eXscwRu77gvoTCE+5mB3k+9iUtyomBIImuBqL6H+xF/aZFoHutLeNqnoAHvYO7 sOkoFTslISFY2uakl711oCefJhUng2xa7XOngiEw= 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.129.124]) by sourceware.org (Postfix) with ESMTPS id A1BD73857805 for ; Thu, 7 Apr 2022 03:26:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A1BD73857805 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.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-147-si-S5Cg9MHmu_VOlwiD5qQ-1; Wed, 06 Apr 2022 23:26:48 -0400 X-MC-Unique: si-S5Cg9MHmu_VOlwiD5qQ-1 Received: by mail-qt1-f199.google.com with SMTP id a24-20020ac81098000000b002e1e06a72aeso4655401qtj.6 for ; Wed, 06 Apr 2022 20:26:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=06dZc4Ay5w5DDHEpntciYHRZMKLXwLJ/CVj0rgRLixg=; b=K8Z7f+WCfIqipM34ovv3dmYt3eTfcFhTrCVSmxNK/Ny8RfBqknL4ycV7BVSBJuZwj5 10ouOQsM4AG9lnZ5nUp777C+P2LESpOUjPxQHR1GhHnSC7YFKZ/AdQkW6nHLjiKPp+Ds PTS+nomq5qqbHhTverdhX4r7WwUPNcTz66CKdtik324I2w/a+YbKZeRsmmuKPzsFZ06T 4+3omS5q59tXtKwT7rl5xsoYEj11VzXG3Z6xj4MgCo6T5VexX8jj01RzSkTVzC8Sr6fu 46zwgJGKzMZlPsGEBJ/Uze73Z1kAvDYraCqXDbIjcchptvG5sN3eBu45uf0W99MVHfSt Se2Q== X-Gm-Message-State: AOAM533cGUBPMCJseXsk/0qV7lX2lDpokyp9WBJYW/LdLuF48KD0Q74e w5Gez5N1chQ+uXBPWEO/K20quhdWZLF9E2vnMs02U3Hx+dv1V3WZtzjfKKTQ2/AoZuM2f7TnVPM R2QIoU1EhT+r9vbfwROW/B++LQUdA2dC1AkgelapiQn8muGDtJksr+zeFmhPIw2u0Cg== X-Received: by 2002:a05:622a:1894:b0:2e1:cbdb:8b74 with SMTP id v20-20020a05622a189400b002e1cbdb8b74mr9796277qtc.643.1649302007245; Wed, 06 Apr 2022 20:26:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxSVgTdT+uC2xEM9ONyciyCrFuSXKN+1aEf1gRtVeACEtXw/0VSjo7srC8MtymHpBqe2SthQg== X-Received: by 2002:a05:622a:1894:b0:2e1:cbdb:8b74 with SMTP id v20-20020a05622a189400b002e1cbdb8b74mr9796268qtc.643.1649302006857; Wed, 06 Apr 2022 20:26:46 -0700 (PDT) Received: from barrymore.redhat.com (130-44-159-43.s15913.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com. [130.44.159.43]) by smtp.gmail.com with ESMTPSA id c10-20020ac87dca000000b002e1db1b7b10sm14906198qte.25.2022.04.06.20.26.45 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Apr 2022 20:26:46 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [pushed] c++: conversion with trailing return type [PR101051] Date: Wed, 6 Apr 2022 23:26:38 -0400 Message-Id: <20220407032638.2422771-1-jason@redhat.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-13.0 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, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, 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: Jason Merrill via Gcc-patches From: Jason Merrill Reply-To: Jason Merrill Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" We've had a diagnostic for this, but since r10-6571 added an assert to splice_late_return_type, we need to diagnose before we call it. Tested x86_64-pc-linux-gnu, applying to trunk. PR c++/101051 gcc/cp/ChangeLog: * decl.cc (grokdeclarator): Reject conversion with trailing return sooner. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/trailing15.C: New test. --- gcc/cp/decl.cc | 7 +++++-- gcc/testsuite/g++.dg/cpp0x/trailing15.C | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/trailing15.C base-commit: 8e4339f5023286d25c7dfa40b4c88e63b780cfd7 diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index 0ff13e99595..c136dbbba1a 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -12866,6 +12866,11 @@ grokdeclarator (const cp_declarator *declarator, "type specifier", name); return error_mark_node; } + if (late_return_type && sfk == sfk_conversion) + { + error ("a conversion function cannot have a trailing return type"); + return error_mark_node; + } type = splice_late_return_type (type, late_return_type); if (type == error_mark_node) return error_mark_node; @@ -13030,8 +13035,6 @@ grokdeclarator (const cp_declarator *declarator, maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION); explicitp = 2; } - if (late_return_type_p) - error ("a conversion function cannot have a trailing return type"); } else if (sfk == sfk_deduction_guide) { diff --git a/gcc/testsuite/g++.dg/cpp0x/trailing15.C b/gcc/testsuite/g++.dg/cpp0x/trailing15.C new file mode 100644 index 00000000000..3fa74d08e39 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/trailing15.C @@ -0,0 +1,14 @@ +// PR c++/101051 +// { dg-do compile { target c++11 } } + +template +class Foo +{ + constexpr operator T() -> T {} // { dg-error "trailing return" } +}; + +struct S { + operator int() const -> double; // { dg-error "trailing return" } +}; + +class A { operator auto*() -> int; }; // { dg-error "auto|trailing return" }