[{"id":3682148,"web_url":"http://patchwork.ozlabs.org/comment/3682148/","msgid":"<47093e6f-36af-11a9-7e22-5c7d3d58a3a5@idea>","list_archive_url":null,"date":"2026-04-24T17:15:20","subject":"Re: [PATCH] c++/modules+reflection: fix merging typedef struct { }\n A [PR124582]","submitter":{"id":78319,"url":"http://patchwork.ozlabs.org/api/people/78319/","name":"Patrick Palka","email":"ppalka@redhat.com"},"content":"On Fri, 24 Apr 2026, Patrick Palka wrote:\n\n> Tested on x86_64-pc-linux-gnu (the new test and also the entire modules\n> testsuite w/ -std=c++26 -freflection) does this look OK for trunk, and\n> perhaps 16.1, or should it wait for 16.2?  The change is small and\n> simple and confined to -freflection, and fixes module std declaration\n> merging which is otherwise pretty much broken as the PR reports, and\n> might make many users sad.  (Although 16 16 also has the #include\n> <header> -> import std redirection which somewhat sidesteps the issue).\n> \n> -- >8 --\n> \n> r16-7903 changed the representation of typedefs to an unnamed type, such\n> as typedef struct { } A, so that we preserve both the unnamed and typedef\n> TYPE_DECL, rather than replacing the unnamed decl.  This patch teaches\n> modules declaration merging to handle the new representation when streaming\n> in the unnamed decl, working around the fact that the unnamed decl isn't\n> visible to name lookup but still has the same DECL_NAME as the typedef decl.\n> \n> \tPR c++/124582\n> \tPR c++/123810\n> \n> gcc/cp/ChangeLog:\n> \n> \t* module.cc (check_mergeable_decl): Handle merging a typedef to\n> \tan unnamed type with the -freflection representation.\n> \n> gcc/testsuite/ChangeLog:\n> \n> \t* g++.dg/modules/anon-4.h: New test.\n> \t* g++.dg/modules/anon-4_a.H: New test.\n> \t* g++.dg/modules/anon-4_b.C: New test.\n> ---\n>  gcc/cp/module.cc                        | 13 +++++++++++++\n>  gcc/testsuite/g++.dg/modules/anon-4.h   |  2 ++\n>  gcc/testsuite/g++.dg/modules/anon-4_a.H |  6 ++++++\n>  gcc/testsuite/g++.dg/modules/anon-4_b.C |  6 ++++++\n>  4 files changed, 27 insertions(+)\n>  create mode 100644 gcc/testsuite/g++.dg/modules/anon-4.h\n>  create mode 100644 gcc/testsuite/g++.dg/modules/anon-4_a.H\n>  create mode 100644 gcc/testsuite/g++.dg/modules/anon-4_b.C\n> \n> diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc\n> index 091031798dc8..98a285201d00 100644\n> --- a/gcc/cp/module.cc\n> +++ b/gcc/cp/module.cc\n> @@ -12158,6 +12158,19 @@ check_mergeable_decl (merge_kind mk, tree decl, tree ovl, merge_key const &key)\n>  \t\t\t   == key.ret))\n>  \t\tfound = match;\n>  \t    }\n> +\t  /* With -freflection, typedef struct { } A is now represented the same\n> +\t     as typedef struct A_ { } A except the TYPE_DECL for A_ is invisible\n> +\t     to name lookup, so we won't be able to find and match it directly.\n> +\t     But we will find A, through which we can obtain A_.  */\n> +\t  else if (flag_reflection\n> +\t\t   && TYPE_DECL_WAS_UNNAMED (d_inner)\n> +\t\t   && DECL_ORIGINAL_TYPE (m_inner))\n> +\t    {\n\nN.B. in this block m_inner is always the implicit typedef, i.e.\nDECL_IMPLICIT_TYPEDEF_P is set, because of the \"else if\".  So we're\nstreaming in the implicit typedef and comparing it to the explicit one\nwe found via name lookup.\n\n> +\t      tree orig = TYPE_NAME (DECL_ORIGINAL_TYPE (m_inner));\n> +\t      if (TYPE_DECL_WAS_UNNAMED (orig)\n> +\t\t  && DECL_NAME (orig) == DECL_NAME (d_inner))\n> +\t\tfound = orig;\n> +\t    }\n>  \t  break;\n>  \n>  \tdefault:\n> diff --git a/gcc/testsuite/g++.dg/modules/anon-4.h b/gcc/testsuite/g++.dg/modules/anon-4.h\n> new file mode 100644\n> index 000000000000..bb3692fc88cf\n> --- /dev/null\n> +++ b/gcc/testsuite/g++.dg/modules/anon-4.h\n> @@ -0,0 +1,2 @@\n> +typedef struct { } A;\n> +struct B { typedef struct { } C; };\n> diff --git a/gcc/testsuite/g++.dg/modules/anon-4_a.H b/gcc/testsuite/g++.dg/modules/anon-4_a.H\n> new file mode 100644\n> index 000000000000..56a1851f3ffa\n> --- /dev/null\n> +++ b/gcc/testsuite/g++.dg/modules/anon-4_a.H\n> @@ -0,0 +1,6 @@\n> +// PR c++/124582\n> +// { dg-do compile { target c++26 } }\n> +// { dg-additional-options \"-fmodule-header -freflection\" }\n> +// { dg-module-cmi {} }\n> +\n> +#include \"anon-4.h\"\n> diff --git a/gcc/testsuite/g++.dg/modules/anon-4_b.C b/gcc/testsuite/g++.dg/modules/anon-4_b.C\n> new file mode 100644\n> index 000000000000..c71a3088d6f6\n> --- /dev/null\n> +++ b/gcc/testsuite/g++.dg/modules/anon-4_b.C\n> @@ -0,0 +1,6 @@\n> +// PR c++/124582\n> +// { dg-do compile { target c++26 } }\n> +// { dg-additional-options \"-fmodules -fno-module-lazy -freflection\" }\n> +\n> +#include \"anon-4.h\"\n> +import \"anon-4_a.H\";\n> -- \n> 2.54.0.rc1.54.g60f07c4f5c\n> \n>","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=XHX/LFHr;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.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=XHX/LFHr","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 [38.145.34.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 4g2KNr4SRkz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 25 Apr 2026 03:15:56 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 9A4224BB58E9\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 24 Apr 2026 17:15:54 +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 23F834BAD14F\n for <gcc-patches@gcc.gnu.org>; Fri, 24 Apr 2026 17:15:27 +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-198-NoJzbfLsOVioR3uL3U7ZcA-1; Fri, 24 Apr 2026 13:15:23 -0400","by mail-qv1-f69.google.com with SMTP id\n 6a1803df08f44-8acb4b340f4so22288986d6.1\n for <gcc-patches@gcc.gnu.org>; Fri, 24 Apr 2026 10:15:23 -0700 (PDT)","from [2600:4040:aa66:bf00:9e8e:99ff:fed1:71f]\n ([2600:4040:aa66:bf00:9e8e:99ff:fed1:71f])\n by smtp.gmail.com with ESMTPSA id\n 6a1803df08f44-8b02aec3a3bsm190707036d6.49.2026.04.24.10.15.21\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Fri, 24 Apr 2026 10:15:21 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 9A4224BB58E9","OpenDKIM Filter v2.11.0 sourceware.org 23F834BAD14F"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 23F834BAD14F","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 23F834BAD14F","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777050927; cv=none;\n b=xlq41oYMMoGuEMtJn4VTzwgW/Ylt66y25JCtiMSS4NFyhfjx2FmfaZ1Hk2ovQnvNQCtccLJazD9NYwBAV0LsfMOquUMB0LBO5JFVulOmz8CoxAfcJJ/9YxrbC0+oWd/hW2Pnb5EP+mWuNFNzNuhV3f4BDNf2J6fEKedFntoCKoM=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777050927; c=relaxed/simple;\n bh=8+zu3vAnxYyal9l3C7+wl28ooB5+hv5lSh9k/8tc7eg=;\n h=DKIM-Signature:From:Date:To:Subject:Message-ID:MIME-Version;\n b=p21yYN7Ii3nWoifJD72ehvz50/I7NihVOKFjRY7F7+LUZ9sJeWcgvQy1Y7S5dwLQONVId7/v9RM3Vi9QWpgCcdQZZD1sQzBfsWMGxiCGo5CxeXJiHzbne8JtZ7Zn19ukv9arJ70lmO398xkeqWcW/6+PES3loIN0vVZmqtzPFT4=","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=1777050926;\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 in-reply-to:in-reply-to:references:references;\n bh=sbif9GULHvjpwnjZsJ9p01ZCc7ivJVAtncPIkQRBMmQ=;\n b=XHX/LFHr8qUtlyn+MgF/dZkK9JqvDhozjLIUum8DqElpWZOY0u7BwrWIGW/N/7QFDagZIx\n RbThyaL1/6/F5qabhv6o3IXE7aK1LTPx4MgYbD/6u8C6jEYlPkvkqLnGWieGJpHf62y2Xw\n FNiAJrKCBVmjWLPxD0rhlCyuOG57GMs=","X-MC-Unique":"NoJzbfLsOVioR3uL3U7ZcA-1","X-Mimecast-MFC-AGG-ID":"NoJzbfLsOVioR3uL3U7ZcA_1777050923","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777050923; x=1777655723;\n h=mime-version:references:message-id:in-reply-to:subject:cc:to:date\n :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=sbif9GULHvjpwnjZsJ9p01ZCc7ivJVAtncPIkQRBMmQ=;\n b=m8jNoRQjIUYlA4fVv1lYugyFsVg0a2IRflcZOqgnMImSpffLLKOJ031UIWreVLt/UP\n Tbg+ULVV3entE3+xpQKSEfv714RUBxo60PdD3siAfhcxYsGefFlDTmGEW5/tDsBBRTYS\n POplpbrxll52uj25C6eb8x/fe3xsnLbaOMnLVmtBcIUoGaFEhTDC6iMuk12/CUF/wjLX\n UEcCP9t1bwcOmmS/PMeoI7Z//Lzl/xAQ2UlSY4Hzmg6pweUbBwzp3kt+N95VUCjs8fRw\n 3NwK1Fcx8FDSkhxha1BCi4+HOZDnnPd2z4WbDl+w1140wf6sUSIZiVzuMsxhVW2nJeqc\n +sWw==","X-Gm-Message-State":"AOJu0YxZVQyZa1kH/drcR9OXQ/Wsqup06PvHBCFmXI4tk2Jkw1Xa4D/N\n C1v2pC5WReL6EqgT9+iP0e3QxuiJhkxImHbA8h0S9aqA+9C1xNFt0Y9jIBkthup4HJdP6JcIKfI\n lz+AxuOZrqSy+pk2kHkEkrlxYrG7HsEAVx8cTomlAsjo/DXTxBHlT8yD6Kco=","X-Gm-Gg":"AeBDiev+A93/A2ZbQiK5mA9/8GnkomoFLaQl2PFlugwnPb0fyS1JCkNWei/1QiNHt1h\n gnjHrrcQe7CjmRRAMttM3r2zLH8FQYvismxIHMSnyQhPQbSHX8iboKELICIxEWYWO3B3+OXC4jQ\n GNvOOA6tFlP49Zl3IcA9R5eIQUoyAZn4EJSX2bbp5JID/3whk3GBXDTLJFRlHUdCn6PXPTpW2n5\n DryjX80QBuwKrl3GszkmfT+ZnPe7/4vcinCrhhtlKYsMhCkFe93QItRc/31f9itdctOYWA14GQD\n O6t4+1x87+BM4slCxBUKrFHKPMolqgo11zy4OwJDDTy3dvsBsBMIK/lYoqxJDhVr5B2k5xlQo0a\n Plshk/jwsmzTx3/JPvnvQC/OLTqv2T9/P8Ya168gi0A70irr1stPcVW8WAtlBVHtS","X-Received":["by 2002:a05:6214:e84:b0:89a:732e:f805 with SMTP id\n 6a1803df08f44-8b028196c12mr384863896d6.7.1777050922445;\n Fri, 24 Apr 2026 10:15:22 -0700 (PDT)","by 2002:a05:6214:e84:b0:89a:732e:f805 with SMTP id\n 6a1803df08f44-8b028196c12mr384863206d6.7.1777050921963;\n Fri, 24 Apr 2026 10:15:21 -0700 (PDT)"],"From":"Patrick Palka <ppalka@redhat.com>","X-Google-Original-From":"Patrick Palka <patrick@idea>","Date":"Fri, 24 Apr 2026 13:15:20 -0400 (EDT)","To":"Patrick Palka <ppalka@redhat.com>","cc":"gcc-patches@gcc.gnu.org, jason@redhat.com, jakub@redhat.com","Subject":"Re: [PATCH] c++/modules+reflection: fix merging typedef struct { }\n A [PR124582]","In-Reply-To":"<20260424140504.1709726-1-ppalka@redhat.com>","Message-ID":"<47093e6f-36af-11a9-7e22-5c7d3d58a3a5@idea>","References":"<20260424140504.1709726-1-ppalka@redhat.com>","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"lR3bT6cQ8768D6vx-9pnWzMbyZ9ExXQy6MG4EC9nl4w_1777050923","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain; charset=US-ASCII","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"}},{"id":3682152,"web_url":"http://patchwork.ozlabs.org/comment/3682152/","msgid":"<39c55277-1df5-1cff-da9c-bee516bf425d@idea>","list_archive_url":null,"date":"2026-04-24T17:19:25","subject":"Re: [PATCH] c++/modules+reflection: fix merging typedef struct { }\n A [PR124582]","submitter":{"id":78319,"url":"http://patchwork.ozlabs.org/api/people/78319/","name":"Patrick Palka","email":"ppalka@redhat.com"},"content":"On Fri, 24 Apr 2026, Patrick Palka wrote:\n\n> On Fri, 24 Apr 2026, Patrick Palka wrote:\n> \n> > Tested on x86_64-pc-linux-gnu (the new test and also the entire modules\n> > testsuite w/ -std=c++26 -freflection) does this look OK for trunk, and\n> > perhaps 16.1, or should it wait for 16.2?  The change is small and\n> > simple and confined to -freflection, and fixes module std declaration\n> > merging which is otherwise pretty much broken as the PR reports, and\n> > might make many users sad.  (Although 16 16 also has the #include\n> > <header> -> import std redirection which somewhat sidesteps the issue).\n> > \n> > -- >8 --\n> > \n> > r16-7903 changed the representation of typedefs to an unnamed type, such\n> > as typedef struct { } A, so that we preserve both the unnamed and typedef\n> > TYPE_DECL, rather than replacing the unnamed decl.  This patch teaches\n> > modules declaration merging to handle the new representation when streaming\n> > in the unnamed decl, working around the fact that the unnamed decl isn't\n> > visible to name lookup but still has the same DECL_NAME as the typedef decl.\n> > \n> > \tPR c++/124582\n> > \tPR c++/123810\n> > \n> > gcc/cp/ChangeLog:\n> > \n> > \t* module.cc (check_mergeable_decl): Handle merging a typedef to\n> > \tan unnamed type with the -freflection representation.\n> > \n> > gcc/testsuite/ChangeLog:\n> > \n> > \t* g++.dg/modules/anon-4.h: New test.\n> > \t* g++.dg/modules/anon-4_a.H: New test.\n> > \t* g++.dg/modules/anon-4_b.C: New test.\n> > ---\n> >  gcc/cp/module.cc                        | 13 +++++++++++++\n> >  gcc/testsuite/g++.dg/modules/anon-4.h   |  2 ++\n> >  gcc/testsuite/g++.dg/modules/anon-4_a.H |  6 ++++++\n> >  gcc/testsuite/g++.dg/modules/anon-4_b.C |  6 ++++++\n> >  4 files changed, 27 insertions(+)\n> >  create mode 100644 gcc/testsuite/g++.dg/modules/anon-4.h\n> >  create mode 100644 gcc/testsuite/g++.dg/modules/anon-4_a.H\n> >  create mode 100644 gcc/testsuite/g++.dg/modules/anon-4_b.C\n> > \n> > diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc\n> > index 091031798dc8..98a285201d00 100644\n> > --- a/gcc/cp/module.cc\n> > +++ b/gcc/cp/module.cc\n> > @@ -12158,6 +12158,19 @@ check_mergeable_decl (merge_kind mk, tree decl, tree ovl, merge_key const &key)\n> >  \t\t\t   == key.ret))\n> >  \t\tfound = match;\n> >  \t    }\n> > +\t  /* With -freflection, typedef struct { } A is now represented the same\n> > +\t     as typedef struct A_ { } A except the TYPE_DECL for A_ is invisible\n> > +\t     to name lookup, so we won't be able to find and match it directly.\n> > +\t     But we will find A, through which we can obtain A_.  */\n> > +\t  else if (flag_reflection\n> > +\t\t   && TYPE_DECL_WAS_UNNAMED (d_inner)\n> > +\t\t   && DECL_ORIGINAL_TYPE (m_inner))\n> > +\t    {\n> \n> N.B. in this block m_inner is always the implicit typedef, i.e.\n\nOops, I meant d_inner i.e. the decl we're streaming in! So,\n  d_inner is the implicit typedef we're streaming in\n  m_inner is the explicit typedef found via name lookup\n\n> DECL_IMPLICIT_TYPEDEF_P is set, because of the \"else if\".  So we're\n> streaming in the implicit typedef and comparing it to the explicit one\n> we found via name lookup.\n> \n> > +\t      tree orig = TYPE_NAME (DECL_ORIGINAL_TYPE (m_inner));\n> > +\t      if (TYPE_DECL_WAS_UNNAMED (orig)\n> > +\t\t  && DECL_NAME (orig) == DECL_NAME (d_inner))\n> > +\t\tfound = orig;\n> > +\t    }\n> >  \t  break;\n> >  \n> >  \tdefault:\n> > diff --git a/gcc/testsuite/g++.dg/modules/anon-4.h b/gcc/testsuite/g++.dg/modules/anon-4.h\n> > new file mode 100644\n> > index 000000000000..bb3692fc88cf\n> > --- /dev/null\n> > +++ b/gcc/testsuite/g++.dg/modules/anon-4.h\n> > @@ -0,0 +1,2 @@\n> > +typedef struct { } A;\n> > +struct B { typedef struct { } C; };\n> > diff --git a/gcc/testsuite/g++.dg/modules/anon-4_a.H b/gcc/testsuite/g++.dg/modules/anon-4_a.H\n> > new file mode 100644\n> > index 000000000000..56a1851f3ffa\n> > --- /dev/null\n> > +++ b/gcc/testsuite/g++.dg/modules/anon-4_a.H\n> > @@ -0,0 +1,6 @@\n> > +// PR c++/124582\n> > +// { dg-do compile { target c++26 } }\n> > +// { dg-additional-options \"-fmodule-header -freflection\" }\n> > +// { dg-module-cmi {} }\n> > +\n> > +#include \"anon-4.h\"\n> > diff --git a/gcc/testsuite/g++.dg/modules/anon-4_b.C b/gcc/testsuite/g++.dg/modules/anon-4_b.C\n> > new file mode 100644\n> > index 000000000000..c71a3088d6f6\n> > --- /dev/null\n> > +++ b/gcc/testsuite/g++.dg/modules/anon-4_b.C\n> > @@ -0,0 +1,6 @@\n> > +// PR c++/124582\n> > +// { dg-do compile { target c++26 } }\n> > +// { dg-additional-options \"-fmodules -fno-module-lazy -freflection\" }\n> > +\n> > +#include \"anon-4.h\"\n> > +import \"anon-4_a.H\";\n> > -- \n> > 2.54.0.rc1.54.g60f07c4f5c\n> > \n> > \n>","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=Tz+/80xZ;\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=Tz+/80xZ","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 4g2KTd2C4Kz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 25 Apr 2026 03:20:04 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 043A74BB58D8\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 24 Apr 2026 17:20:02 +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 991654B9DB6D\n for <gcc-patches@gcc.gnu.org>; Fri, 24 Apr 2026 17:19:32 +0000 (GMT)","from mail-qt1-f198.google.com (mail-qt1-f198.google.com\n [209.85.160.198]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-695-XjMX0WiuMYmJCt3xURet5w-1; Fri, 24 Apr 2026 13:19:28 -0400","by mail-qt1-f198.google.com with SMTP id\n d75a77b69052e-50fb98b09d3so13909511cf.2\n for <gcc-patches@gcc.gnu.org>; Fri, 24 Apr 2026 10:19:28 -0700 (PDT)","from [2600:4040:aa66:bf00:9e8e:99ff:fed1:71f]\n ([2600:4040:aa66:bf00:9e8e:99ff:fed1:71f])\n by smtp.gmail.com with ESMTPSA id\n d75a77b69052e-50e394c1fddsm200218021cf.30.2026.04.24.10.19.26\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Fri, 24 Apr 2026 10:19:26 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 043A74BB58D8","OpenDKIM Filter v2.11.0 sourceware.org 991654B9DB6D"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 991654B9DB6D","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 991654B9DB6D","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777051172; cv=none;\n b=uVphgN/4R9COgsrgOZlklCT2IdhUBSgJqjPAtSgNx2p3VU0xnzVQpLwJKIrs8xvNmz9M+sAX7efz8sL4Mw8ZVYaQHTIfI+fBa7k4ovsBbgfETv+P2WR5pYaAqJOk3KGqTiSTE+HmWJUei+0kr7Sr3qYjpCeuWojboXD9/fSYbqI=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777051172; c=relaxed/simple;\n bh=0nZlPVtGxNfdJudQBEcJPEaghZvnP5wddstqlrjZL0w=;\n h=DKIM-Signature:From:Date:To:Subject:Message-ID:MIME-Version;\n b=tvFDsUM/XE/o8GeN6SRFKoHDL6mmp8sjjWykKOXATPz/EiOUKTxFOB0TIjU/KLR1XM981V5yDsjjMQUx/gaOArnInP0d0Ob+iaueTYMGZaqxwgRnImO+UbYLjXeqTC3IaVIbekzss29HbcQOP7Kx1aiLcCYEcNMScU+Nr8M5Yqk=","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=1777051172;\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 in-reply-to:in-reply-to:references:references;\n bh=rdoydJUlfSc/S45/9HmLzq7pC2WzY4HaRb8tryJy9/s=;\n b=Tz+/80xZu2bRm98BAoQ3YwycpoWYrDZAg/1jsz1OWX2XFZcPvm5oNMF5e0AvSTezPX5B0M\n RR/Rmz2Aysa8aNxH6ZIQ1Xjuyu5lGz+8cMMpIyOg9y3nCBdg8UTUozZ2il3FM0JGhaIlqU\n 5QLFy56DIpiZR92hHuIcdsZy5Jurffk=","X-MC-Unique":"XjMX0WiuMYmJCt3xURet5w-1","X-Mimecast-MFC-AGG-ID":"XjMX0WiuMYmJCt3xURet5w_1777051168","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777051168; x=1777655968;\n h=mime-version:references:message-id:in-reply-to:subject:cc:to:date\n :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=rdoydJUlfSc/S45/9HmLzq7pC2WzY4HaRb8tryJy9/s=;\n b=eh12XoOQtT0z7Id15pTfh1zltkBfn7rEtMmRkg85GR1iW9+0FRAYOcap0QQSv3ySQL\n ofH72CHuXFNvHjSatumbp6i02rRjeItwnWw0rQD9vtC8ezw4a6qUbICv15T4ijmZTGf5\n /RnKsTzKaw48szESOCCsIe4M9XqCCxla84LX2B/c/OsI8xBsvSS6Ao6HnF0cMup7M0n9\n kEGTNL1vjCV26JioQmZVR4llRilHCga8gHjnvviyesQKKQp0S8imw7qR7zDrucsqiccm\n IEqSPeRmFtbvSXlqLO8Y3Q1TPa3PrEZYp9CRM1LWTQQilxzFF/HNymRjnbGL4FKOAFtw\n GHNA==","X-Gm-Message-State":"AOJu0YyN+TDu87cVVcn0UJcXQlwc6BU2d4G/niLUfKYU8Ylwa+a/h5su\n aqPd86c30KBR1NpkzbpJf8SHxEHuarO3V/ddMPwqBQrxdfrkibn3GqoF0Wzxo+1ZXy//50Bt2kM\n UGKiEWAqj/RfJBLcgdi14pEqI42ur9oL6mVIpZEtjtJE4sr4YwReOLLsMgAY=","X-Gm-Gg":"AeBDiev5xCueXUdbFIlkZAELFl/vUCxcIjweKKRLYVp0vHiJ9UikApysAzpzSiI1DnE\n IXy3xNyy7rF8CI+onOTT15ibyudCN+d3RberHDwVYbxY7CiTJ5Qg/GCCzobJp6mYIvA06JNhuSd\n xOHeTiDje7ZvLh4BEN2hbwqxV3golejNfiV4zAAT6uzSn3AVBNzWpNtEz7Ehg/9JoDCrGjqV8r2\n MPdGM6sdFzmsPppSTmyAE3rwWODGfa+BMrAmJn1g4MhJZO9ASr84iTZT96h/4AbqizJIGaeI7yS\n ijo7uf/dp7HGDo3mYu3HLQ9ecf+nD0juAFv8uUGl53IibGPkw6dUf2LTzMmb0As4yRDd4IgWusR\n BpsgSs1kEfie2WXzPShjDy21mICG8flvFceYbG9SzNlYzyxqiMXkDr3yNoEbDmYOa","X-Received":["by 2002:a05:622a:1482:b0:50b:2875:5782 with SMTP id\n d75a77b69052e-50e36c56612mr331830591cf.6.1777051167989;\n Fri, 24 Apr 2026 10:19:27 -0700 (PDT)","by 2002:a05:622a:1482:b0:50b:2875:5782 with SMTP id\n d75a77b69052e-50e36c56612mr331830101cf.6.1777051167441;\n Fri, 24 Apr 2026 10:19:27 -0700 (PDT)"],"From":"Patrick Palka <ppalka@redhat.com>","X-Google-Original-From":"Patrick Palka <patrick@idea>","Date":"Fri, 24 Apr 2026 13:19:25 -0400 (EDT)","To":"Patrick Palka <ppalka@redhat.com>","cc":"gcc-patches@gcc.gnu.org, jason@redhat.com, jakub@redhat.com","Subject":"Re: [PATCH] c++/modules+reflection: fix merging typedef struct { }\n A [PR124582]","In-Reply-To":"<47093e6f-36af-11a9-7e22-5c7d3d58a3a5@idea>","Message-ID":"<39c55277-1df5-1cff-da9c-bee516bf425d@idea>","References":"<20260424140504.1709726-1-ppalka@redhat.com>\n <47093e6f-36af-11a9-7e22-5c7d3d58a3a5@idea>","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"7bzBBXwD4sPz99o6mr_t-sUbh9yZot0Ci32TD4hWjpg_1777051168","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain; charset=US-ASCII","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"}}]