From patchwork Mon Oct 4 16:40:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Palka X-Patchwork-Id: 45793 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 762B63858423 for ; Mon, 4 Oct 2021 16:41:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 762B63858423 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1633365690; bh=cwEHIgQAhNo4O7jSC2WpqyYqcyCHMPkoM58jQbZ4Sys=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=nYYPCeUk8EGIhY8WCEDpINfJkFqEoqhu3VLO9eKc8pYPQiT+xg7IEpeFIF5M4A+fb qjpJVi7Kx3OdI7PAx2l6rN+FcQkFXvORL5yqShfJXVVM+/ZMvmOliTPLY2TEC/U+iJ lBJ46tw56d2d8IRAhb0OYiqYO8sVUkRjJ7OlC/7s= 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 [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 93F9A3858D28 for ; Mon, 4 Oct 2021 16:41:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 93F9A3858D28 Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-505-sM8HDYHFOYKOP7XjIvTwSg-1; Mon, 04 Oct 2021 12:41:00 -0400 X-MC-Unique: sM8HDYHFOYKOP7XjIvTwSg-1 Received: by mail-qt1-f197.google.com with SMTP id a18-20020aed2792000000b002a6d480aa95so21020783qtd.14 for ; Mon, 04 Oct 2021 09:41:00 -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:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=cwEHIgQAhNo4O7jSC2WpqyYqcyCHMPkoM58jQbZ4Sys=; b=5mI3DR0raX2t0/Nq638TmiE9pZ/0o1HGb0moleZvTQ7U9kKK+g4oAvXBOEF5iSbQ9B o8s/KDIuAmVfDIcr3bTvxf/0+SA+DtE0HEokxYP+yKogiQ4+cTJjcc24+kcqgwpeStQ7 o404DuScNbJKTrJFJVHP/hhXgdde6TOx4YdDFW4lLoYt8DwDlgjmpxoLJ3kjSXShcesP J5TDuOY3rWPCGSDA/LwuK3Do1WieljN4+PXYWA08CoGdOawZw/sE9Gi/yCzZzaEeBXjP oEHETEHuYswa7b6fS9kwYP7n/go+lNrUzZES3cIIA7dT2hQh9ugoH7SWnQrWYnjhOwuH W92w== X-Gm-Message-State: AOAM530i+tC/gbjAhesJ0KPYJLgCkk5mbMwL7Ct3NEUuRJGk/O8sbX40 agTIF33b1iQ5ojPSdXcDjZrgyZ2jkiRGezbRVvyWTg1X6lyr21fLjNu0ixBPkDwBxaU8oxNDktK ptt+On3m+xFAIAdJhj/P5tO7WHVP8n1T0e+NDoSbtninYTO/0ldeGvo0vTDvqO3lm3SE= X-Received: by 2002:a37:50f:: with SMTP id 15mr10924352qkf.423.1633365659743; Mon, 04 Oct 2021 09:40:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx7DDIvIKSWBP6zA9ouv82Qmhm432uMMiukRaRiNsqMQ6zH/avEyjfX2K1Ezh0JvuJPQuFmBA== X-Received: by 2002:a37:50f:: with SMTP id 15mr10924327qkf.423.1633365659447; Mon, 04 Oct 2021 09:40:59 -0700 (PDT) Received: from localhost.localdomain (ool-457d493a.dyn.optonline.net. [69.125.73.58]) by smtp.gmail.com with ESMTPSA id v23sm7847756qkj.76.2021.10.04.09.40.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Oct 2021 09:40:58 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH] c++: odr-use argument to a function NTTP [PR53164] Date: Mon, 4 Oct 2021 12:40:57 -0400 Message-Id: <20211004164057.718456-1-ppalka@redhat.com> X-Mailer: git-send-email 2.33.0.610.gcefe983a32 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-15.7 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_H2, 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-Patchwork-Original-From: Patrick Palka via Gcc-patches From: Patrick Palka Reply-To: Patrick Palka Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" When passing a function template as the argument to a function NTTP inside a template, we resolve it to the right specialization ahead of time via resolve_address_of_overloaded_function, though the call to mark_used within defers odr-using it until instantiation time (as usual). But at instantiation time we end up never calling mark_used on the specialization. This patch fixes this by adding a call to mark_used in convert_nontype_argument_function. PR c++/53164 gcc/cp/ChangeLog: * pt.c (convert_nontype_argument_function): Call mark_used. gcc/testsuite/ChangeLog: * g++.dg/template/non-dependent16.C: New test. --- gcc/cp/pt.c | 3 +++ gcc/testsuite/g++.dg/template/non-dependent16.C | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 gcc/testsuite/g++.dg/template/non-dependent16.C diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index f950f4a21b7..5e819c9598c 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -6668,6 +6668,9 @@ convert_nontype_argument_function (tree type, tree expr, return NULL_TREE; } + if (!mark_used (fn_no_ptr, complain) && !(complain & tf_error)) + return NULL_TREE; + linkage = decl_linkage (fn_no_ptr); if (cxx_dialect >= cxx11 ? linkage == lk_none : linkage != lk_external) { diff --git a/gcc/testsuite/g++.dg/template/non-dependent16.C b/gcc/testsuite/g++.dg/template/non-dependent16.C new file mode 100644 index 00000000000..b7dca8f6752 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/non-dependent16.C @@ -0,0 +1,16 @@ +// PR c++/53164 + +template +void f(T) { + T::fail; // { dg-error "not a member" } +} + +template +struct A { }; + +template +void g() { + A a; +} + +template void g<0>();