[{"id":3676036,"web_url":"http://patchwork.ozlabs.org/comment/3676036/","msgid":"<70435d36-4ea6-4033-afef-74e9c3da1c42@redhat.com>","list_archive_url":null,"date":"2026-04-10T20:06:21","subject":"Re: [PATCH v2] c++/reflection: mangling dependent splices [PR123237]","submitter":{"id":4337,"url":"http://patchwork.ozlabs.org/api/people/4337/","name":"Jason Merrill","email":"jason@redhat.com"},"content":"On 4/10/26 1:04 PM, Marek Polacek wrote:\n> On Wed, Apr 01, 2026 at 05:12:39PM -0400, Jason Merrill wrote:\n>> On 4/1/26 1:57 PM, Jakub Jelinek wrote:\n>>> On Wed, Apr 01, 2026 at 01:40:09PM -0400, Jason Merrill wrote:\n>>>> In all three cases, I'd think; I expect the different contexts to be clear\n>>>> from where it appears.\n>>>>\n>>>>> the question is if we need to differentiate also between the\n>>>>> cases where they have different operands (your patch has one case for\n>>>>> TEMPLATE_ID_EXPR and another for the rest, one is something <template-args>\n>>>>> and one is <expression>.  For the something, you use <expression> but\n>>>>> <expression> <template-args> doesn't appear anywhere else in the grammar,\n>>>>> though perhaps it is needed because it might be say L Dm ft ... E etc.\n>>>>> And similarly for <expression> cases.\n>>>>\n>>>> Could we just add\n>>>>\n>>>> ::= sl <expression> [ <template-args> ] # splice\n>>>>\n>>>> in <prefix>, <type>, and <expression>?  <template-param> doesn't get spelled\n>>>> differently when it's a type vs expression.\n>>>\n>>> <template-param> has neither of those\n>>\n>> I mean when it appears as an expansion of <type> or <expression>, we have\n>> all of\n>>\n>> <prefix> ::= <template-param>\n>> <type> ::= <template-param>\n>> <expression> ::= <template-param>\n>>\n>> but yes, we would need to choose a prefix that is unambiguous in all three\n>> contexts, and as you point out 'sl' conflicts with 's', so I suppose your DS\n>> suggestion is better.\n> \n> My understanding is that you want DS for all three kind of splices.\n> So this patch adds\n> \n>    <splice> ::= DS <expression> [ <template-args> ] E\n> \n> I think the final E is desirable, <decltype> has it too.\n> \n> I've fixed the missing write_reflection bits.\n> \n> Does this look OK?  Note that it depends on the 124835 fix.\n> Tested x86_64-pc-linux-gnu.\n> \n> -- >8 --\n> This patch adds a mangling for dependent splices.  Since the ABI discussion\n> at <https://github.com/itanium-cxx-abi/cxx-abi/issues/208> hasn't gelled\n> yet, this mangling might change in the future.  In this patch I'm adding\n> \n>    <splice> ::= DS <expression> [ <template-args> ] E\n> \n> for all dependent splices.\n> \n> When we have ^^T::x, we can't say what kind of reflection this\n> will be, so this patch emits the \"de\" prefix.  For template template\n> parameters we emit \"tt\".\n> \n> \tPR c++/123237\n> \tPR c++/124771\n> \tPR c++/124842\n> \n> gcc/cp/ChangeLog:\n> \n> \t* mangle.cc (write_splice): New.\n> \t(write_prefix): Call write_splice for SPLICE_SCOPE.\n> \t(write_type): Likewise.\n> \t(write_expression): Call write_splice for dependent_splice_p.\n> \t(write_reflection): Handle the \"tt\" and \"de\" prefixes.\n> \t* reflect.cc (reflection_mangle_prefix): For\n> \tDECL_TEMPLATE_TEMPLATE_PARM_P, use the prefix \"tt\".  For\n> \tdependent reflections, use \"de\".\n> \n> gcc/testsuite/ChangeLog:\n> \n> \t* g++.dg/reflect/mangle2.C: New test.\n> \t* g++.dg/reflect/mangle3.C: New test.\n> \t* g++.dg/reflect/mangle4.C: New test.\n> \t* g++.dg/reflect/mangle5.C: New test.\n> ---\n>   gcc/cp/mangle.cc                       |  61 ++++++-\n>   gcc/cp/reflect.cc                      |  15 ++\n>   gcc/testsuite/g++.dg/reflect/mangle2.C |  48 +++++\n>   gcc/testsuite/g++.dg/reflect/mangle3.C | 241 +++++++++++++++++++++++++\n>   gcc/testsuite/g++.dg/reflect/mangle4.C |  26 +++\n>   gcc/testsuite/g++.dg/reflect/mangle5.C |  25 +++\n>   6 files changed, 412 insertions(+), 4 deletions(-)\n>   create mode 100644 gcc/testsuite/g++.dg/reflect/mangle2.C\n>   create mode 100644 gcc/testsuite/g++.dg/reflect/mangle3.C\n>   create mode 100644 gcc/testsuite/g++.dg/reflect/mangle4.C\n>   create mode 100644 gcc/testsuite/g++.dg/reflect/mangle5.C\n> \n> diff --git a/gcc/cp/mangle.cc b/gcc/cp/mangle.cc\n> index d1301789ef4..70b7d49e7b0 100644\n> --- a/gcc/cp/mangle.cc\n> +++ b/gcc/cp/mangle.cc\n> @@ -240,6 +240,7 @@ static void write_local_name (tree, const tree, const tree);\n>   static void dump_substitution_candidates (void);\n>   static tree mangle_decl_string (const tree);\n>   static void maybe_check_abi_tags (tree, tree = NULL_TREE, int = 10);\n> +static void write_splice (tree);\n>   \n>   /* Control functions.  */\n>   \n> @@ -1299,7 +1300,8 @@ write_nested_name (const tree decl)\n>   \t    ::= <template-prefix> <template-args>\n>   \t    ::= <decltype>\n>   \t    ::= # empty\n> -\t    ::= <substitution>  */\n> +\t    ::= <substitution>\n> +\t    ::= <splice>\t    # C++26 dependent splice [proposed]  */\n>   \n>   static void\n>   write_prefix (const tree node)\n> @@ -1319,6 +1321,12 @@ write_prefix (const tree node)\n>         return;\n>       }\n>   \n> +  if (TREE_CODE (node) == SPLICE_SCOPE)\n> +    {\n> +      write_splice (node);\n> +      return;\n> +    }\n> +\n>     if (find_substitution (node))\n>       return;\n>   \n> @@ -2444,7 +2452,7 @@ write_local_name (tree function, const tree local_entity,\n>   \t    ::= G <type>    # imaginary (C 2000)     [not supported]\n>   \t    ::= U <source-name> <type>   # vendor extended type qualifier\n>   \n> -   C++0x extensions\n> +   C++11 extensions\n>   \n>        <type> ::= RR <type>   # rvalue reference-to\n>        <type> ::= Dt <expression> # decltype of an id-expression or\n> @@ -2452,6 +2460,7 @@ write_local_name (tree function, const tree local_entity,\n>        <type> ::= DT <expression> # decltype of an expression\n>        <type> ::= Dn              # decltype of nullptr\n>        <type> ::= Dm\t\t# decltype of ^^int\n> +     <type> ::= <splice>\t# C++26 dependent splice [proposed]\n>   \n>      TYPE is a type node.  */\n>   \n> @@ -2734,6 +2743,10 @@ write_type (tree type)\n>   \t      ++is_builtin_type;\n>   \t      break;\n>   \n> +\t    case SPLICE_SCOPE:\n> +\t      write_splice (type);\n> +\t      break;\n> +\n>   \t    case TYPEOF_TYPE:\n>   \t      sorry (\"mangling %<typeof%>, use %<decltype%> instead\");\n>   \t      break;\n> @@ -3441,7 +3454,10 @@ range_expr_nelts (tree expr)\n>   \t\t  ::= L <mangled-name> E\t\t# external name\n>   \t\t  ::= st <type>\t\t\t\t# sizeof\n>   \t\t  ::= sr <type> <unqualified-name>\t# dependent name\n> -\t\t  ::= sr <type> <unqualified-name> <template-args> */\n> +\t\t  ::= sr <type> <unqualified-name> <template-args>\n> +\t\t  ::= L Dm <value reflection> E\t\t# C++26 reflection\n> +\t\t\t\t\t\t\t# value [proposed]\n> +\t\t  ::= <splice>\t\t# C++26 dependent splice [proposed]  */\n>   \n>   static void\n>   write_expression (tree expr)\n> @@ -3699,6 +3715,8 @@ write_expression (tree expr)\n>   \twrite_string (\"on\");\n>         write_unqualified_id (expr);\n>       }\n> +  else if (dependent_splice_p (expr))\n> +    write_splice (expr);\n>     else if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)\n>       {\n>         tree fn = TREE_OPERAND (expr, 0);\n> @@ -4174,7 +4192,9 @@ write_expression (tree expr)\n>   \t\t  ::= co [ <prefix> ] <unqualified-name> # concept\n>   \t\t  ::= na [ <prefix> ] <unqualified-name> # namespace alias\n>   \t\t  ::= ns [ <prefix> ] <unqualified-name> # namespace\n> -\t\t  ::= gs\t\t\t\t# ^^::\n> +\t\t  ::= gs\t\t\t\t # ^^::\n> +\t\t  ::= tt <template-template-arg>\t # templ templ parm\n\nThere is no <template-template-arg> nonterminal in the ABI (despite the \nfake quote in mangle.cc), this should be -param.\n\n> +\t\t  ::= de <expression>\t\t\t # dependent expr\n>   \t\t  ::= ba [ <nonnegative number> ] _ <type> # dir. base cls rel\n>   \t\t  ::= ds <type> _ [ <unqualified-name> ] _\n>   \t\t      [ <alignment number> ] _ [ <bit-width number> ] _\n> @@ -4286,6 +4306,39 @@ write_reflection (tree refl)\n>         for (int i = 5; i < TREE_VEC_LENGTH (arg); ++i)\n>   \twrite_template_arg (REFLECT_EXPR_HANDLE (TREE_VEC_ELT (arg, i)));\n>       }\n> +  else if (strcmp (prefix, \"tt\") == 0)\n> +    {\n> +      gcc_assert (DECL_TEMPLATE_TEMPLATE_PARM_P (arg));\n> +      write_template_template_arg (arg);\n\n...and this should be _param.\n\n> +    }\n> +  else if (strcmp (prefix, \"de\") == 0)\n> +    write_expression (arg);\n\nAdd gcc_unreachable here too?\n\n> +}\n> +\n> +/* Mangle a dependent splice.\n> +\n> +     <splice> ::= DS <expression> [ <template-args> ] E\n> +\n> +   TODO: This is only a proposed mangling.\n> +   See <https://github.com/itanium-cxx-abi/cxx-abi/issues/208>.  */\n> +\n> +static void\n> +write_splice (tree sp)\n> +{\n> +  write_string (\"DS\");\n> +\n> +  if (TREE_CODE (sp) == SPLICE_SCOPE)\n> +    sp = SPLICE_SCOPE_EXPR (sp);\n> +  gcc_assert (dependent_splice_p (sp));\n> +  if (TREE_CODE (sp) == TEMPLATE_ID_EXPR)\n> +    {\n> +      write_expression (TREE_OPERAND (TREE_OPERAND (sp, 0), 0));\n> +      write_template_args (TREE_OPERAND (sp, 1));\n> +    }\n> +  else\n> +    write_expression (TREE_OPERAND (sp, 0));\n> +\n> +  write_char ('E');\n>   }\n>   \n>   /* Literal subcase of non-terminal <template-arg>.\n> diff --git a/gcc/cp/reflect.cc b/gcc/cp/reflect.cc\n> index 8925bf49465..1b091f21437 100644\n> --- a/gcc/cp/reflect.cc\n> +++ b/gcc/cp/reflect.cc\n> @@ -9161,6 +9161,21 @@ reflection_mangle_prefix (tree refl, char prefix[3])\n>         strcpy (prefix, \"ds\");\n>         return h;\n>       }\n> +  /* ??? We don't have a metafunction for template template parameters.  */\n\nBecause an actual reflection will never be of any kind of template \nparameter, so a metafunction wouldn't make any sense.\n\nThis relates to Richard's comment that different mangling for different \nkinds of template seems unnecessary, and in general that we should reuse \nmore of the existing grammar.  I would think that for most things we \ncould use\n\nreflection ::= <template-arg>\n\nwith a smaller number of additional cases.  But let's not try to change \nthat now.\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=YWxFBiTq;\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=YWxFBiTq","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.133.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 4fsnrn3whRz1yGb\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 11 Apr 2026 06:07:03 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 1926A4BA2E3C\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 10 Apr 2026 20:06:56 +0000 (GMT)","from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by sourceware.org (Postfix) with ESMTP id 39CBE4BA2E10\n for <gcc-patches@gcc.gnu.org>; Fri, 10 Apr 2026 20:06:27 +0000 (GMT)","from mail-qk1-f168.google.com (mail-qk1-f168.google.com\n [209.85.222.168]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-624-NooPyTHcMBOJPFQrGXDFIw-1; Fri, 10 Apr 2026 16:06:25 -0400","by mail-qk1-f168.google.com with SMTP id\n af79cd13be357-8cfc8e7f987so415946885a.2\n for <gcc-patches@gcc.gnu.org>; Fri, 10 Apr 2026 13:06:25 -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-8ddb8d6de73sm282597585a.26.2026.04.10.13.06.22\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Fri, 10 Apr 2026 13:06:23 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 1926A4BA2E3C","OpenDKIM Filter v2.11.0 sourceware.org 39CBE4BA2E10"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 39CBE4BA2E10","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 39CBE4BA2E10","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1775851587; cv=none;\n b=Nj7U/g0oD/zq+EPB12Fd0vc8lNx33SLMrRM6OYmdSNNCxYCbblLi8p6HtyxpScF4SFdFT6L9W6jR1dHABrw9wwConSRlB+MS8/PVwl/HJFM5x++kuSB9/e7koSCr6lln619uNEaqjje6taoHuO7B9SE6wgf4z8zZekwMIz1F0Fk=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1775851587; c=relaxed/simple;\n bh=8ljesg5uAn6BpECIRTHqiFDWLGDlFcu5yM96CoEaMQc=;\n h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From;\n b=aHQx6d6kjdNgFh1p8VcRKckJREQFeovAwYYDnYVfzQRUX2B3SkyBfWTSg38P7hKAwT1yLbdCTvNwmx1V7Q2I2Fdq7j1HPGMpBZK7B4bh/qgqq8Zt0H14LuVrlmjrKjuR6EIw/vt8TVNjBWAT5Hg2M+w45dAdCIl3Cp/aHKaRzGM=","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=1775851586;\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=3lFG26raxsvcs2aQg0JjCwMiDaSfc0If2aBFVOvzwUs=;\n b=YWxFBiTqHKW4qXGMSWajJ9FCc6Hpyfj8TcsM6lUhGqBShnZesQoFTzi28Kv7EsyAkDJ497\n QjFzh989X3/9alVKzQwEPbNpxUR+dbc8JWxF655shmz17W/4E4HwVzu0Xr7pxVqUGk6hJY\n bGXhyfhksi8jIuJbGoWwjPTF6S4Gu+w=","X-MC-Unique":"NooPyTHcMBOJPFQrGXDFIw-1","X-Mimecast-MFC-AGG-ID":"NooPyTHcMBOJPFQrGXDFIw_1775851585","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775851585; x=1776456385;\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=3lFG26raxsvcs2aQg0JjCwMiDaSfc0If2aBFVOvzwUs=;\n b=aHIR+hgRbaxKBNkv+7ueYwrlKMFzik8fL1Pcm5vo5tllTHN7l70RWiTMWRnlM6O0+j\n j0yE5ZJ8KxNhDrkBRaDWhJIehwVigsNjh8dthOPeMUN7wnVARUsEmLxxSGE0JpWwWibe\n PbSsgvk8FE8llwqUlPgDpv9+xhIfC9yhvogydXi9rIyq89nlceCvwkUM42oevdTjRnY2\n Ob96LnX6FnnqYs85p9HjhS8pzA+lqQ4wPBxNQWCWVSOZUCGcmY0d7JG6aGu1Xbs/zLJD\n R23/k9u35MVUHU8ZrumGeMbIeTecOEvQi0g2rx/DGO0liPGpngGEZWqPiIIkE9rTCKns\n Vcog==","X-Forwarded-Encrypted":"i=1;\n AJvYcCWAgHV+O4JMSWBM7B2HI32Lo8RavFdrNWRI/rlb9NqR5WvJjDSPvhiBB2M/+LnTG043GXYjAYXlJAWZZg==@gcc.gnu.org","X-Gm-Message-State":"AOJu0Yxxf+5aaFNxkyXmLI7ssjBLsnvMNeYDcrbJcEaOr7SXJLXZGmhe\n 1eKQcFWXMrGepx6Xwmok3JMWCnDU7X/wvcMF0gF8n+zhgJSmqzxkczumQbqpHKfRlLITRXucyhW\n oEs0XMuT6LFxtEhcgn/XWg43UCldXEhz4jOGKhsNMP3dvEXocB9z8eN2CGmE=","X-Gm-Gg":"AeBDiet0gnjtXR4gZBnUDPuGXvv13xryPl2rdT8fWr3TYdZONfh/vE2eBMxvsREaXLA\n jMUd/DolYpCMcWiYJQG3ExmESvrgRXlrsrEH0my+aLttE3gf+NBGC8swV84yOvxIWet7KK9Ksao\n KdeNbf9EjiZkMw8IxGE0lNP5GntPNIN0y+XHD5eGjhQMT1/iYMjcaSd2r8c5g6p9ajvulrMGFeE\n wQXnyPR7XK8trYe30MLFg5WV6zqCr6aD+HjCBcNBYM8yfXpTkaNhoOIrKdNqTBka1CwM7vHRm5c\n 74DkJuaPSxnxjsn1kFZ6Zjl99D9WpOmEJethxVvOJiDImvrb6VMuPG3qFWlMg/5l8d9IzG3nl/T\n XbJHZRY7MaGkO+CdxjnbVnAufAlUFcy0CY2fS6xfR+lMBiD03pnfIR/sE3i2qPauhUTzSs3Na3V\n JgGfR9v24PAD3Zlb0BGfs8Gjp8r64iKaI=","X-Received":["by 2002:a05:620a:2901:b0:8d6:39c0:e6b6 with SMTP id\n af79cd13be357-8ddd078bea4mr619910685a.64.1775851585139;\n Fri, 10 Apr 2026 13:06:25 -0700 (PDT)","by 2002:a05:620a:2901:b0:8d6:39c0:e6b6 with SMTP id\n af79cd13be357-8ddd078bea4mr619904385a.64.1775851584544;\n Fri, 10 Apr 2026 13:06:24 -0700 (PDT)"],"Message-ID":"<70435d36-4ea6-4033-afef-74e9c3da1c42@redhat.com>","Date":"Fri, 10 Apr 2026 16:06:21 -0400","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v2] c++/reflection: mangling dependent splices [PR123237]","To":"Marek Polacek <polacek@redhat.com>","Cc":"Jakub Jelinek <jakub@redhat.com>, GCC Patches <gcc-patches@gcc.gnu.org>","References":"<20260318150312.630675-1-polacek@redhat.com>\n <aczktP_u9tYuAnK-@tucnak> <ef597b55-3c4f-46be-ba0d-2927d5282dfc@redhat.com>\n <ac1chZct0jZ3-UP_@tucnak> <39e90c0d-7bdb-46da-bf5e-2c5c7fa58f8a@redhat.com>\n <adktrw95NxSQ50vG@redhat.com>","From":"Jason Merrill <jason@redhat.com>","In-Reply-To":"<adktrw95NxSQ50vG@redhat.com>","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"mNphbE_NmfscF4gy9Mg8GkjuSCPLJpNWWUedD8L5Iuc_1775851585","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"}}]