From patchwork Wed May 25 15:09:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 54379 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 8DB2B382F0BD for ; Wed, 25 May 2022 15:11:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8DB2B382F0BD DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1653491488; bh=aVtJ76j1yxQMOKll+wZTmu4kcavoaqdbc1hCeMnI/3k=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=tC+Q7YCb6AheN1z3oFJSw9QrALR+w2Ky1LlsDK1u+g2DXTeeJj6NqPJO4gWNSqWrm IEnO0AYWDiK4+AZmeWJI+Lq6KsN11P228MYvaLzCy6Uu3FwGdrEcKpcoFuFuNbj+qn 7OiB7jrPJdXZr6EfJx7TpX25I47Q4NMz2Kp4h300= 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 47175382E915 for ; Wed, 25 May 2022 15:09:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 47175382E915 Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-511-6XHsePWGOUi-7y3bkhOi1w-1; Wed, 25 May 2022 11:09:27 -0400 X-MC-Unique: 6XHsePWGOUi-7y3bkhOi1w-1 Received: by mail-qt1-f197.google.com with SMTP id a11-20020a05622a02cb00b002f3d23bdca2so16416926qtx.5 for ; Wed, 25 May 2022 08:09:27 -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=aVtJ76j1yxQMOKll+wZTmu4kcavoaqdbc1hCeMnI/3k=; b=N9HapYKo+5QTDkysw/NOMqqwpvnD8h1e9haY65bApeijN0HezjHn7CNibpsIH0UmYB 5Jn3ZvBy6nDH2h8WJEt0svaDxTeKrwtVPfOlrUw0fZmfNkUDdKANYwOzEicR4Dbsbsyf XbrnwkEEe1ePqW23YCg1gdLlnjGjj7zO2kkhzx3L+juTJxhIHLwbCQG9bfOcJ1t4AuS/ vNkfSTvK/8dOvloNTWawXDvhj1lw0YlnsIxMOnL3t11nkzfQ5JFtVspdprVJUpmv/jVA ugjLgc6QR1DFozwgjEmdqmi57zbk5zgAjwAY9Hy82oAOzUIUZG0wlkmE5mHtlnUAogqx QgTw== X-Gm-Message-State: AOAM532vJlAUmyvqO1WJkJlYQHFbXV+kAi4AeR+VvHh2QU2WsMNLyzzh aMkaQuqBD2h5TwW4UebgZ2rX59JRHakb4FYqkrcOMstqdm3ji1Qw3O/scZdbyhNK0FEFpb/nk8G 8QKEQGwQSL9SUZ0uzm2mSF/w4zDpx5bHKLaITTJwdUfnbn8jdFdXFOtLYOfXhY1F6vQ== X-Received: by 2002:a05:620a:746:b0:6a3:8939:b82b with SMTP id i6-20020a05620a074600b006a38939b82bmr10409089qki.319.1653491366680; Wed, 25 May 2022 08:09:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzPT8yBPoP8lz4MmpSEaZ9RZDvOCBpRlNqh5Lz3YcV8Dhf1scxsXPnGq2qX6Hxo/mCoA1sdfA== X-Received: by 2002:a05:620a:746:b0:6a3:8939:b82b with SMTP id i6-20020a05620a074600b006a38939b82bmr10409054qki.319.1653491366186; Wed, 25 May 2022 08:09:26 -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 p6-20020a05620a112600b006a37710ef89sm1261762qkk.115.2022.05.25.08.09.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 May 2022 08:09:25 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [pushed] c++: deduction from auto fn [PR105623] Date: Wed, 25 May 2022 11:09:23 -0400 Message-Id: <20220525150923.1115953-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.5 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 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" Since my patch for PR90451, we defer mark_used of single functions as late as possible. And since my r12-1273, we keep BASELINK from lookup around rather than reconstruct it later. These both made us try to instantiate g with a function type that still had 'auto' as its return type. Tested x86_64-pc-linux-gnu, applying to trunk. PR c++/105623 gcc/cp/ChangeLog: * decl2.cc (mark_used): Copy type from fn to BASELINK. * pt.cc (unify_one_argument): Call mark_single_function. gcc/testsuite/ChangeLog: * g++.dg/cpp1y/auto-fn62.C: New test. --- gcc/cp/decl2.cc | 11 ++++++++--- gcc/cp/pt.cc | 4 ++++ gcc/testsuite/g++.dg/cpp1y/auto-fn62.C | 14 ++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp1y/auto-fn62.C base-commit: 1b661f3f5e712c951e774b3b91fffe4dac734cc7 prerequisite-patch-id: cc6e608c68f4eb133f6a153f83dfe4f033544cbd prerequisite-patch-id: b29700132a341b1334a8e95d8f2809f7122f7181 diff --git a/gcc/cp/decl2.cc b/gcc/cp/decl2.cc index ae743c8a3df..e72fdf05382 100644 --- a/gcc/cp/decl2.cc +++ b/gcc/cp/decl2.cc @@ -5799,10 +5799,15 @@ mark_used (tree decl, tsubst_flags_t complain) actually used until after overload resolution. */ if (BASELINK_P (decl)) { - decl = BASELINK_FUNCTIONS (decl); - if (really_overloaded_fn (decl)) + tree fns = BASELINK_FUNCTIONS (decl); + if (really_overloaded_fn (fns)) return true; - decl = OVL_FIRST (decl); + fns = OVL_FIRST (fns); + if (!mark_used (fns, complain)) + return false; + /* We might have deduced its return type. */ + TREE_TYPE (decl) = TREE_TYPE (fns); + return true; } if (!DECL_P (decl)) diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index b45a29926d2..76913cb1409 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -22643,6 +22643,10 @@ unify_one_argument (tree tparms, tree targs, tree parm, tree arg, return unify_success (explain_p); } + /* Force auto deduction now. Use tf_none to avoid redundant + deprecated warning on deprecated-14.C. */ + mark_single_function (arg, tf_none); + arg_expr = arg; arg = unlowered_expr_type (arg); if (arg == error_mark_node) diff --git a/gcc/testsuite/g++.dg/cpp1y/auto-fn62.C b/gcc/testsuite/g++.dg/cpp1y/auto-fn62.C new file mode 100644 index 00000000000..9c2bff1ccf3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/auto-fn62.C @@ -0,0 +1,14 @@ +// PR c++/105623 +// { dg-do compile { target c++14 } } + +template +auto g(T fn) { } + +template +struct base { + static auto value() { } +}; + +struct S : base { + static void f() { g(value); } +};