[{"id":3677336,"web_url":"http://patchwork.ozlabs.org/comment/3677336/","msgid":"<f9c2d7d4-89c2-4444-a9f6-e5d61ae37d9a@redhat.com>","list_archive_url":null,"date":"2026-04-14T17:48:27","subject":"Re: [PATCH v2] c++: introduce reflection_function_template_p","submitter":{"id":4337,"url":"http://patchwork.ozlabs.org/api/people/4337/","name":"Jason Merrill","email":"jason@redhat.com"},"content":"On 4/14/26 12:34 PM, Marek Polacek wrote:\n> On Tue, Apr 14, 2026 at 12:23:25PM -0400, Jason Merrill wrote:\n>> On 4/14/26 10:17 AM, Marek Polacek wrote:\n>>> Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk?\n>>>\n>>> -- >8 --\n>>> As discussed in\n>>> <https://gcc.gnu.org/pipermail/gcc-patches/2026-April/712156.html>,\n>>> this patch introduces a new predicate to be used instead of\n>>> really_overloaded_fn when we're checking for a function template.\n>>\n>> This name is rather misleading for uses outside of reflection, given that it\n>> will return true for an overload set that contains two non-templates.  Let's\n>> include some form of \"reflection\" in the function name.\n> \n> OK, I've renamed the new function to reflection_function_template_p,\n> we already have reflection_mangle_prefix and reflection_type_linkage_name.\n> \n> Ran dg.exp=reflect/*, ok for trunk?\n> \n> -- >8 --\n> As discussed in\n> <https://gcc.gnu.org/pipermail/gcc-patches/2026-April/712156.html>,\n> this patch introduces a new predicate to be used instead of\n> really_overloaded_fn when we're checking for a function template in the\n> Reflection code.\n> \n> gcc/cp/ChangeLog:\n> \n> \t* cp-tree.h (reflection_function_template_p): Declare.\n> \t* parser.cc (cp_parser_splice_expression): Use\n> \treflection_function_template_p instead of really_overloaded_fn.\n> \t* reflect.cc (check_splice_expr): Likewise.\n> \t(reflection_function_template_p): New.\n> ---\n>   gcc/cp/cp-tree.h  |  1 +\n>   gcc/cp/parser.cc  |  2 +-\n>   gcc/cp/reflect.cc | 12 ++++++++++--\n>   3 files changed, 12 insertions(+), 3 deletions(-)\n> \n> diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h\n> index 1080203ac8a..c5a3a6bd39b 100644\n> --- a/gcc/cp/cp-tree.h\n> +++ b/gcc/cp/cp-tree.h\n> @@ -9442,6 +9442,7 @@ extern tree make_splice_scope (tree, bool);\n>   extern bool dependent_splice_p (const_tree) ATTRIBUTE_PURE;\n>   extern tree reflection_mangle_prefix (tree, char [3]);\n>   extern void check_consteval_only_fn (tree);\n> +extern bool reflection_function_template_p (tree) ATTRIBUTE_PURE;\n>   \n>   /* Inline bodies.  */\n>   \n> diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc\n> index 9dbc2933e7b..742cfd03621 100644\n> --- a/gcc/cp/parser.cc\n> +++ b/gcc/cp/parser.cc\n> @@ -6341,7 +6341,7 @@ cp_parser_splice_expression (cp_parser *parser, bool template_p,\n>         && (targs_p\n>   \t  /* No 'template' but the splice-specifier designates a function\n>   \t     template?  */\n> -\t  || really_overloaded_fn (t))\n> +\t  || reflection_function_template_p (t))\n>         && warning_enabled_at (loc, OPT_Wmissing_template_keyword))\n>       /* Were 'template' present, this would be valid code, so keep going.  */\n>       missing_template_diag (loc, diagnostics::kind::pedwarn);\n> diff --git a/gcc/cp/reflect.cc b/gcc/cp/reflect.cc\n> index 4ef340f0726..d560658378e 100644\n> --- a/gcc/cp/reflect.cc\n> +++ b/gcc/cp/reflect.cc\n> @@ -8978,7 +8978,7 @@ check_splice_expr (location_t loc, location_t start_loc, tree t,\n>   \t template.  */\n>         if (!targs_p)\n>   \t{\n> -\t  if (!really_overloaded_fn (t) && !dependent_splice_p (t))\n> +\t  if (!reflection_function_template_p (t) && !dependent_splice_p (t))\n>   \t    {\n>   \t      if (complain_p)\n>   \t\t{\n> @@ -9005,7 +9005,7 @@ check_splice_expr (location_t loc, location_t start_loc, tree t,\n>   \t    }\n>   \t  return false;\n>   \t}\n> -      gcc_checking_assert (really_overloaded_fn (t)\n> +      gcc_checking_assert (reflection_function_template_p (t)\n>   \t\t\t   || get_template_info (t)\n>   \t\t\t   || TREE_CODE (t) == TEMPLATE_ID_EXPR\n>   \t\t\t   || variable_template_p (t)\n> @@ -9197,4 +9197,12 @@ reflection_mangle_prefix (tree refl, char prefix[3])\n>     gcc_unreachable ();\n>   }\n>   \n> +/* Returns true iff X is a function template for Reflection purposes.  */\n\nLet's say \"is a reflection of a function template\".  OK with that change.\n\nJason","headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=KIgidBYy;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=KIgidBYy","sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com","sourceware.org; spf=pass smtp.mailfrom=redhat.com","server2.sourceware.org;\n arc=none smtp.remote-ip=170.10.129.124"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fwBbh1948z1yHH\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 15 Apr 2026 03:49:02 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 200284BA2E32\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 17:49:01 +0000 (GMT)","from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.129.124])\n by sourceware.org (Postfix) with ESMTP id CE2994BA2E06\n for <gcc-patches@gcc.gnu.org>; Tue, 14 Apr 2026 17:48:32 +0000 (GMT)","from mail-qv1-f69.google.com (mail-qv1-f69.google.com\n [209.85.219.69]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-423-yvcjcE16Md2kRVnS6Q7cew-1; Tue, 14 Apr 2026 13:48:31 -0400","by mail-qv1-f69.google.com with SMTP id\n 6a1803df08f44-8acd145817dso50463816d6.3\n for <gcc-patches@gcc.gnu.org>; Tue, 14 Apr 2026 10:48:31 -0700 (PDT)","from [192.168.50.130]\n (130-44-146-247.s12789.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com.\n [130.44.146.247]) by smtp.gmail.com with ESMTPSA id\n af79cd13be357-8ddb5f89ccdsm1087327885a.5.2026.04.14.10.48.27\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Tue, 14 Apr 2026 10:48:28 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 200284BA2E32","OpenDKIM Filter v2.11.0 sourceware.org CE2994BA2E06"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org CE2994BA2E06","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org CE2994BA2E06","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776188912; cv=none;\n b=HCno+Pl8bRtpxur0dyosaT4uXsYnfSAGct+J8pEYmXQG1Nupr5PO2ZMM0RLIUmfARvpXOj9wVDFn50T4Fv06b8EvLaIFvYzTLB09JnXFnexSZY6IK7gMRDzbkgnOR9OWKNEL642vNixPg53pwcxGeY49DmvWw51jxfa/DvRO5JM=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776188912; c=relaxed/simple;\n bh=V8kDyhr+EId57s6qHbcIUWaTnfp+uU1c1gOX65c3aEI=;\n h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From;\n b=sknNMrBALQwC1flxwHV4oT/e6SJdQHlYF+lJIGCckCBt3LU16QLtkN8NmECeMl0eGZrbEh2k1wgSK/3wnDDc5OreBXzYyfjdGq4qoboq747om3VDgLVxcYG0FjV0nPf07D4gLU3ohDWWGuHW3wVW3l8sraG1qD1+lH0pf33BtfI=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776188912;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=4sU83Kz1q1vcpd6EXd/1CcM2HtL8QCGrdzC3IZyCnFE=;\n b=KIgidBYyRsFdk2kPK+dN3LGqDEdBMtOuSx+gUCKLzwI6ufW7MYxu0t5T1hAxogelqBQLBa\n hhzFFA5EcWNQk1ghLPDMbko/zl91QDdrcvGWSEcxOJa7ZHzGXu+Akheo2A/dOA42LTAFnJ\n ZZWKMgfwBbKACfohyeB0Ih7X6g8qtEo=","X-MC-Unique":"yvcjcE16Md2kRVnS6Q7cew-1","X-Mimecast-MFC-AGG-ID":"yvcjcE16Md2kRVnS6Q7cew_1776188911","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776188910; x=1776793710;\n h=content-transfer-encoding:in-reply-to:from:content-language\n :references:cc:to:subject:user-agent:mime-version:date:message-id\n :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=4sU83Kz1q1vcpd6EXd/1CcM2HtL8QCGrdzC3IZyCnFE=;\n b=AW5Q5nDJrZv3jBs+PXXGwf9wjUX9taJCz8GPtePWhGkSXxMl2phZ9oku5rOefjyiKu\n z73wGQ9yEyYUpwuuTBz3krZ+g0uWB4fxNYLd0jymew8n2hkCx6y0Q5XhGcEECzK5GGRe\n TCafSqhEtAUU3GKv22VIBB4rdEOEzyxpC8Gyg8Vaek6JQWuruZJtBmhbuDHidbRGOeQ7\n dwSr1KqukdO9DUn0QtdGCmmEvzW54jEWqWMBRWsWcByyBRlYfsaMInBRxfL9tpa7bN9V\n SUR1L/JlajhTscxAXSLdsU7F3bzkeb75WpFr3Mkb3CJMqWC81ADSprShegvA3n3EhXHl\n Zzgw==","X-Gm-Message-State":"AOJu0YykW45LwUqK9r0gRPGlqYq6NAHkpGN7vkTxQEW303HkbJH/023K\n mVsQZty3v13DUBDuxFFzNYjDUZmkbA+rwSKFQKJjbNcWBjMJJq1giObdsi6xlz3lSNNM3RA/hro\n Gdo0F45bnSKxasFSi87HE4TjhBckQ1yuYinM5QKXwymY/HsE99sonIP/6LUvNdYtvJ0j6gw==","X-Gm-Gg":"AeBDiev31Iptd9oACjudajzygUPPk+uUGxobwWhADYY4A8azvTO4AgSlrn38u6vKz5w\n g84ZWoIR9Bc9l5y1na5GJj7FXeZGq0TEqtsBgU9JgYCMCHdxKgAUsqro6CiD6rQRMdwub9eW95D\n gk1socSiGHhoKIRe12MLukNULMrmrwX7UbnS1Ruw5oT76s0fHcH6XJZfmvHKwDA5k6TTGFsPkzu\n 9rjyW/ZdwzGqDJqFCJNKMCN+03vRoiEZUL6XbP7dqqo0MVmgwzDX/SEAe+Rz3R49OE+8jRA9D8N\n wn0zByrI6gOAlG0+0e6p6yS7bW5xrakoMiECpliXLjRrpqryKr4qLYseVIM66HbB1oKCsm3OQwC\n 6gwz4lmrl8ZXghexCg6VCHFLgr6o1x3RYu/5wdViaiF7Uo3TMDPaBD6WESPBMUum58pHRraRWbF\n NB1tWKTuR7+0EchMCmHO4v1eqh0wHDizOaBuE+WYL8vw==","X-Received":["by 2002:a05:620a:2946:b0:8dc:1efd:a9fe with SMTP id\n af79cd13be357-8ddcd5019bamr2737530085a.22.1776188909568;\n Tue, 14 Apr 2026 10:48:29 -0700 (PDT)","by 2002:a05:620a:2946:b0:8dc:1efd:a9fe with SMTP id\n af79cd13be357-8ddcd5019bamr2737524485a.22.1776188908902;\n Tue, 14 Apr 2026 10:48:28 -0700 (PDT)"],"Message-ID":"<f9c2d7d4-89c2-4444-a9f6-e5d61ae37d9a@redhat.com>","Date":"Tue, 14 Apr 2026 13:48:27 -0400","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v2] c++: introduce reflection_function_template_p","To":"Marek Polacek <polacek@redhat.com>","Cc":"GCC Patches <gcc-patches@gcc.gnu.org>","References":"<20260414141710.99666-1-polacek@redhat.com>\n <70fc703f-14cb-4a7c-8c48-f373b8ec9fb2@redhat.com>\n <ad5snYx1aOfMwLBv@redhat.com>","From":"Jason Merrill <jason@redhat.com>","In-Reply-To":"<ad5snYx1aOfMwLBv@redhat.com>","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"--FNs1YAsRh9yF6wvvt9I4cpOVZIX0zMLndwfu8e1As_1776188911","X-Mimecast-Originator":"redhat.com","Content-Language":"en-US","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}}]