[{"id":3687368,"web_url":"http://patchwork.ozlabs.org/comment/3687368/","msgid":"<41b62537-9348-4dff-ace5-5a525745fb08@redhat.com>","list_archive_url":null,"date":"2026-05-06T20:34:33","subject":"Re: [PATCH] c++: Reflection vs.\n CLASSTYPE_TYPEINFO_VAR/ANON_AGGR_TYPE_FIELD sharing [PR124991]","submitter":{"id":4337,"url":"http://patchwork.ozlabs.org/api/people/4337/","name":"Jason Merrill","email":"jason@redhat.com"},"content":"On 5/6/26 4:20 AM, Jakub Jelinek wrote:\n> Hi!\n> \n> typeinfo_var element of lang_type is used for 2 purposes,\n> CLASSTYPE_TYPEINFO_VAR and ANON_AGGR_TYPE_FIELD, a VAR_DECL for types\n> for which we need typeid etc. and FIELD_DECL for anonymous union/struct\n> types inside of classes.\n> Without reflection one can't ask for typeid of the anonymous union/struct\n> types, so sharing the same tree for both purposes is fine, but with\n> reflection we can ICE.\n> \n> As anonymous unions are fairly rare and asking about typeid of those will be\n> even rarer, the following patch attempts to fix that without actually\n> growing the lang_type struct size by using the same tree for both.  If it\n> is NULL_TREE, both CLASSTYPE_TYPEINFO_VAR and ANON_AGGR_TYPE_FIELD\n> are NULL, if it is a VAR_DECL, it is the former, if it is a FIELD_DECL,\n> it is the latter, in the really rare case we need both it is turned\n> into a TREE_LIST where TREE_VALUE is CLASSTYPE_TYPEINFO_VAR and\n> TREE_PURPOSE is ANON_AGGR_TYPE_FIELD.\n> \n> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk/16.2?\n\nOK.\n\n> Note, CWG3130 fortunately disallows attempts to create a different object\n> of ANON_AGGR_TYPE_P type (will need to implement that part), so the other\n> worries from PR124991 (that one can create a variable or member or parameter\n> etc. with the anon union type and get confused by ANON_AGGR_TYPE_FIELD on it\n> or trying to tweak lookup rules etc.) are gone.\n\nThough as you were saying elsewhere, the default constructor/destructor \nchanges in CWG3130 seems problematic for non-member anonymous unions, we \nprobably want to push back on that.\n\n> 2026-05-06  Jakub Jelinek  <jakub@redhat.com>\n> \n> \tPR c++/124991\n> \t* cp-tree.h (struct lang_type): Document typeinfo_var member.\n> \t(get_classtype_typeinfo_var): New inline function.\n> \t(CLASSTYPE_TYPEINFO_VAR): Use it.\n> \t(set_classtype_typeinfo_var): New inline function.\n> \t(SET_CLASSTYPE_TYPEINFO_VAR): Define.\n> \t(get_anon_aggr_type_field): New inline function.\n> \t(ANON_AGGR_TYPE_FIELD): Use it.\n> \t(set_anon_aggr_type_field): New inline function.\n> \t(SET_ANON_AGGR_TYPE_FIELD): Define.\n> \t* decl.cc (fixup_anonymous_aggr): Use SET_ANON_AGGR_TYPE_FIELD\n> \tinstead of ANON_AGGR_TYPE_FIELD.\n> \t* module.cc (trees_in::read_class_def): Use\n> \tSET_CLASSTYPE_TYPEINFO_VAR instead of setting\n> \tCLASSTYPE_TYPEINFO_VAR and do it even for ANON_AGGR_TYPE_P\n> \ttypes.  Use SET_ANON_AGGR_TYPE_FIELD instead of setting\n> \tANON_AGGR_TYPE_FIELD.\n> \t* rtti.cc (get_tinfo_decl_direct): Use SET_CLASSTYPE_TYPEINFO_VAR\n> \tinstead of setting CLASSTYPE_TYPEINFO_VAR.\n> \t* semantics.cc (finish_member_declaration): Use\n> \tSET_ANON_AGGR_TYPE_FIELD instead of setting ANON_AGGR_TYPE_FIELD.\n> \n> \t* g++.dg/reflect/anon5.C: New test.\n> \n> --- gcc/cp/cp-tree.h.jj\t2026-04-28 08:52:42.674411768 +0200\n> +++ gcc/cp/cp-tree.h\t2026-05-05 11:26:48.237006358 +0200\n> @@ -2682,6 +2682,9 @@ struct GTY(()) lang_type {\n>     tree primary_base;\n>     vec<tree_pair_s, va_gc> *vcall_indices;\n>     tree vtables;\n> +  /* CLASSTYPE_TYPEINFO_VAR and/or ANON_AGGR_TYPE_FIELD.  If both,\n> +     this is a TREE_LIST with the former as TREE_VALUE and the latter\n> +     as TREE_PURPOSE.  */\n>     tree typeinfo_var;\n>     vec<tree, va_gc> *vbases;\n>     tree as_base;\n> @@ -3075,11 +3078,44 @@ struct GTY(()) lang_type {\n>   #define CLASSTYPE_VTABLES(NODE) \\\n>     (LANG_TYPE_CLASS_CHECK (NODE)->vtables)\n>   \n> +/* Helper for CLASSTYPE_TYPEINFO_VAR.  */\n> +\n> +inline tree\n> +get_classtype_typeinfo_var (tree typeinfo_var)\n> +{\n> +  if (typeinfo_var == NULL_TREE)\n> +    return NULL_TREE;\n> +  if (TREE_CODE (typeinfo_var) == TREE_LIST)\n> +    return TREE_VALUE (typeinfo_var);\n> +  if (VAR_P (typeinfo_var))\n> +    return typeinfo_var;\n> +  return NULL_TREE;\n> +}\n> +\n>   /* The std::type_info variable representing this class, or NULL if no\n>      such variable has been created.  This field is only set for the\n>      TYPE_MAIN_VARIANT of the class.  */\n>   #define CLASSTYPE_TYPEINFO_VAR(NODE) \\\n> -  (LANG_TYPE_CLASS_CHECK (NODE)->typeinfo_var)\n> +  get_classtype_typeinfo_var (LANG_TYPE_CLASS_CHECK (NODE)->typeinfo_var)\n> +\n> +/* Helper for SET_CLASSTYPE_TYPEINFO_VAR.  */\n> +\n> +inline tree &\n> +set_classtype_typeinfo_var (tree &typeinfo_var)\n> +{\n> +  if (typeinfo_var == NULL_TREE)\n> +    return typeinfo_var;\n> +  if (TREE_CODE (typeinfo_var) == FIELD_DECL)\n> +    typeinfo_var = build_tree_list (typeinfo_var, NULL_TREE);\n> +  if (TREE_CODE (typeinfo_var) == TREE_LIST)\n> +    return TREE_VALUE (typeinfo_var);\n> +  return typeinfo_var;\n> +}\n> +\n> +/* Setter for that.  */\n> +#define SET_CLASSTYPE_TYPEINFO_VAR(NODE, VAR) \\\n> +  (set_classtype_typeinfo_var (LANG_TYPE_CLASS_CHECK (NODE)->typeinfo_var) \\\n> +   = (VAR))\n>   \n>   /* Accessor macros for the BINFO_VIRTUALS list.  */\n>   \n> @@ -5407,9 +5443,42 @@ get_vec_init_expr (tree t)\n>   #define ANON_UNION_TYPE_P(NODE) \\\n>     (TREE_CODE (NODE) == UNION_TYPE && ANON_AGGR_TYPE_P (NODE))\n>   \n> +/* Helper for ANON_AGGR_TYPE_FIELD.  */\n> +\n> +inline tree\n> +get_anon_aggr_type_field (tree typeinfo_var)\n> +{\n> +  if (typeinfo_var == NULL_TREE)\n> +    return NULL_TREE;\n> +  if (TREE_CODE (typeinfo_var) == TREE_LIST)\n> +    return TREE_PURPOSE (typeinfo_var);\n> +  if (TREE_CODE (typeinfo_var) == FIELD_DECL)\n> +    return typeinfo_var;\n> +  return NULL_TREE;\n> +}\n> +\n>   /* For an ANON_AGGR_TYPE_P the single FIELD_DECL it is used with.  */\n>   #define ANON_AGGR_TYPE_FIELD(NODE) \\\n> -  (LANG_TYPE_CLASS_CHECK (NODE)->typeinfo_var)\n> +  get_anon_aggr_type_field (LANG_TYPE_CLASS_CHECK (NODE)->typeinfo_var)\n> +\n> +/* Helper for SET_ANON_AGGR_TYPE_FIELD.  */\n> +\n> +inline tree &\n> +set_anon_aggr_type_field (tree &typeinfo_var)\n> +{\n> +  if (typeinfo_var == NULL_TREE)\n> +    return typeinfo_var;\n> +  if (VAR_P (typeinfo_var))\n> +    typeinfo_var = build_tree_list (NULL_TREE, typeinfo_var);\n> +  if (TREE_CODE (typeinfo_var) == TREE_LIST)\n> +    return TREE_PURPOSE (typeinfo_var);\n> +  return typeinfo_var;\n> +}\n> +\n> +/* Setter for that.  */\n> +#define SET_ANON_AGGR_TYPE_FIELD(NODE, FIELD) \\\n> +  (set_anon_aggr_type_field (LANG_TYPE_CLASS_CHECK (NODE)->typeinfo_var) \\\n> +   = (FIELD))\n>   \n>   /* Define fields and accessors for nodes representing declared names.  */\n>   \n> --- gcc/cp/decl.cc.jj\t2026-04-28 08:52:47.345330582 +0200\n> +++ gcc/cp/decl.cc\t2026-05-05 11:22:05.379600563 +0200\n> @@ -6200,7 +6200,7 @@ fixup_anonymous_aggr (tree t)\n>     vec_safe_truncate (vec, store);\n>   \n>     /* Wipe RTTI info.  */\n> -  CLASSTYPE_TYPEINFO_VAR (t) = NULL_TREE;\n> +  SET_CLASSTYPE_TYPEINFO_VAR (t, NULL_TREE);\n>   \n>     /* Anonymous aggregates cannot have fields with ctors, dtors or complex\n>        assignment operators (because they cannot have these methods themselves).\n> --- gcc/cp/module.cc.jj\t2026-05-05 10:39:23.498137518 +0200\n> +++ gcc/cp/module.cc\t2026-05-05 11:24:58.090794839 +0200\n> @@ -13730,9 +13730,8 @@ trees_in::read_class_def (tree defn, tre\n>   \t\t{\n>   \t\t  CLASSTYPE_BEFRIENDING_CLASSES (type_dup)\n>   \t\t    = CLASSTYPE_BEFRIENDING_CLASSES (type);\n> -\t\t  if (!ANON_AGGR_TYPE_P (type))\n> -\t\t    CLASSTYPE_TYPEINFO_VAR (type_dup)\n> -\t\t      = CLASSTYPE_TYPEINFO_VAR (type);\n> +\t\t  SET_CLASSTYPE_TYPEINFO_VAR (type_dup,\n> +\t\t\t\t\t      CLASSTYPE_TYPEINFO_VAR (type));\n>   \t\t}\n>   \t      for (tree v = type; v; v = TYPE_NEXT_VARIANT (v))\n>   \t\tTYPE_LANG_SPECIFIC (v) = ls;\n> @@ -13773,7 +13772,7 @@ trees_in::read_class_def (tree defn, tre\n>   \t\t       to the as-base FIELD_DECL copy.  */\n>   \t\t    gcc_checking_assert (ANON_AGGR_TYPE_FIELD (anon_type));\n>   \t\t  else\n> -\t\t    ANON_AGGR_TYPE_FIELD (anon_type) = decl;\n> +\t\t    SET_ANON_AGGR_TYPE_FIELD (anon_type, decl);\n>   \t\t}\n>   \n>   \t      if (TREE_CODE (decl) == USING_DECL\n> --- gcc/cp/rtti.cc.jj\t2026-03-27 10:17:14.033332387 +0100\n> +++ gcc/cp/rtti.cc\t2026-05-05 11:23:27.832261102 +0200\n> @@ -490,7 +490,7 @@ get_tinfo_decl_direct (tree type, tree n\n>   \n>         d = pushdecl_top_level_and_finish (d, NULL_TREE);\n>         if (CLASS_TYPE_P (type))\n> -\tCLASSTYPE_TYPEINFO_VAR (TYPE_MAIN_VARIANT (type)) = d;\n> +\tSET_CLASSTYPE_TYPEINFO_VAR (TYPE_MAIN_VARIANT (type), d);\n>   \n>         /* Add decl to the global array of tinfo decls.  */\n>         vec_safe_push (unemitted_tinfo_decls, d);\n> --- gcc/cp/semantics.cc.jj\t2026-04-30 10:18:13.827688681 +0200\n> +++ gcc/cp/semantics.cc\t2026-05-05 11:24:36.620143633 +0200\n> @@ -4284,7 +4284,7 @@ finish_member_declaration (tree decl)\n>         && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))\n>       {\n>         gcc_assert (!ANON_AGGR_TYPE_FIELD (TYPE_MAIN_VARIANT (TREE_TYPE (decl))));\n> -      ANON_AGGR_TYPE_FIELD (TYPE_MAIN_VARIANT (TREE_TYPE (decl))) = decl;\n> +      SET_ANON_AGGR_TYPE_FIELD (TYPE_MAIN_VARIANT (TREE_TYPE (decl)), decl);\n>       }\n>   \n>     if (TREE_CODE (decl) == USING_DECL)\n> --- gcc/testsuite/g++.dg/reflect/anon5.C.jj\t2026-05-05 11:52:55.849584570 +0200\n> +++ gcc/testsuite/g++.dg/reflect/anon5.C\t2026-05-05 12:03:15.339521433 +0200\n> @@ -0,0 +1,16 @@\n> +// PR c++/124991\n> +// { dg-do run { target c++26 } }\n> +// { dg-additional-options \"-freflection\" }\n> +\n> +#include <meta>\n> +\n> +struct X { union { char b; float c; }; };\n> +constexpr auto ctx = std::meta::access_context::unchecked ();\n> +\n> +int\n> +main ()\n> +{\n> +  if (typeid (typename [: parent_of (^^X::b) :])\n> +      != typeid (typename [: members_of (^^X, ctx)[0] :]))\n> +    __builtin_abort ();\n> +}\n> \n> \tJakub\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=fMSe6kXA;\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=fMSe6kXA","sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com","sourceware.org; spf=pass smtp.mailfrom=redhat.com","sourceware.org; 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 4g9nFH4TjTz1y04\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 07 May 2026 06:35:14 +1000 (AEST)","from vm01.sourceware.org (localhost [IPv6:::1])\n\tby sourceware.org (Postfix) with ESMTP id 1AAB04BA23C0\n\tfor <incoming@patchwork.ozlabs.org>; Wed,  6 May 2026 20:35:12 +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 300C84BA2E2B\n for <gcc-patches@gcc.gnu.org>; Wed,  6 May 2026 20:34:40 +0000 (GMT)","from mail-qk1-f197.google.com (mail-qk1-f197.google.com\n [209.85.222.197]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-554-56_-oTtZNV6kWe2xkiYtRg-1; Wed, 06 May 2026 16:34:36 -0400","by mail-qk1-f197.google.com with SMTP id\n af79cd13be357-902de1c513bso396328385a.0\n for <gcc-patches@gcc.gnu.org>; Wed, 06 May 2026 13:34:36 -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-8fc2c253bc9sm1932662685a.27.2026.05.06.13.34.34\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Wed, 06 May 2026 13:34:34 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 1AAB04BA23C0","OpenDKIM Filter v2.11.0 sourceware.org 300C84BA2E2B"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 300C84BA2E2B","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 300C84BA2E2B","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778099680; cv=none;\n b=QUCvwQzDl4fcW7PRlDbsRAfoiX+6XPOwoH5jAgwISiSo9xa1fIxfwT1KEyp2eZano1HndCjwiVO68wEM0kxk2H+uburdD7/Kbhv+Qg1LgfVwNIR0WlCw3xmuA57KyUKWZcPR9TDaNQAhrZha16/i2MjX3NSYhfYyuJx+E7HN9JA=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1778099680; c=relaxed/simple;\n bh=YFm7gkJTQ/++kL77+2LftX0EkzlNuDFLVv34hI1G33c=;\n h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From;\n b=JT4OVGy+0lb3lSbDwlbuHC4UFqGZ2aaSkrW/Mal/Qvqr0RTkh4zQt9td35JTubqu9OXvuaMmQP/QnikCrJmHP3LWOoE4gTWvF0+6/wWiQVc3QR7k9HwoSrBnRi8jzk4sEPgGIET1Tz5Z/743sdSrRwMJ1tHBnjUJVeAaVQNLmWg=","ARC-Authentication-Results":"i=1; sourceware.org;\n dkim=pass (1024-bit key, unprotected)\n header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=fMSe6kXA","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1778099679;\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=y3u+YSBk6ShuXxyZBEDYPLgyMrnO+W0Y4hat2BK/yLU=;\n b=fMSe6kXAgZdFvRFTDrnDY5aBerqqfnC1LHNO5KQsQbr+KE10tIqiLrt+vnNYQiGrZtDU3Q\n 63oH3ZerkQLWAeCmQbVKlwspJpjHn+ZG8ANF4w7eCBTy30O8bVfaT1Mgtwury7FC8a4kbm\n i2SUu9ftWe47h5PDl/GnMz4eW0/M9Yw=","X-MC-Unique":"56_-oTtZNV6kWe2xkiYtRg-1","X-Mimecast-MFC-AGG-ID":"56_-oTtZNV6kWe2xkiYtRg_1778099676","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1778099676; x=1778704476;\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=y3u+YSBk6ShuXxyZBEDYPLgyMrnO+W0Y4hat2BK/yLU=;\n b=O11SypE5RN2HbN9hxWg7FKXpvOhg+nY9+zfG2EpbwoNAQiaCaU/O6opZF5DTa5M0ZT\n TormN/+SVvuEZT2/9oPs/UjvsGE38wkQ3u4EilzWA3ZcNEeLNoVszai5lcvwks41uu0F\n tmcw/Hsa83b369QCiuiZJuIzo9SVi+Qy4kRX6vJgr63IyWcw+/FxnNB5ZMIsCs3iwvlo\n OUueuY0SzOfckSI66BRwWIFORXHhuqOGghMeWDNK0aHHvdH8ft2N7/sGIszyaSyVdN+X\n N49lsJeC2X4esW4/UPytnDSrYbT8VtfkNyxt3kOlGjV0Y5YwFd6MBpv73zyYDpSqS1mc\n elEA==","X-Gm-Message-State":"AOJu0YwuEQXvQI2xi+mMLdZcNbZX8JE1OXoa1hhNkHCk/hzzvDB3xogb\n JIlD4aCjazLWW1TrdkOz/2UG4b5ogXeDTsrRLU33hng4FjtrGsz/SvqEiONcDeWbzBKRXGhtHJH\n JoMs0qy2/jzZ7CfyVy6YOlE09IDn9eEMlqRQ7UJ0rL/S8gs4yOfgMW/iIKhM=","X-Gm-Gg":"AeBDietn4SP/KV004CM/Ck0goxXRMurwZDec6kG9FDOQZEtXctAKiLy0Q+LvMUqcGxW\n MbhnG46BqBMQa9p4WqpiHjiyJY64skj5N6MoyRJxrYvg5H1zzu9O0i8ImXTwYos/NPSzfnecfHZ\n Oo8VO4VGmyLR3ejgGc12mkZbilRS58TAGDSwIt1MSQroYGhp8hXQ+7XJShp04vA9JdYUJux/mSe\n AUS5p8Us1KlEgILGQfVYcwqSQ4hHSzLa0+RFDxxeGAvcmkpSzQkakwp1ikpSUSR8iNPdzZ/YPfP\n 4CSJ7bMaqZyGRolSLUCxHNp6CcYEOKu3hGcUITVgcNeF0npGvtMOFQhs+umDPkVmFpul1hTGlxj\n B/SCeqq4+gMzAFlRvK7LlMYPBZ9EzT8CHVHugAa+DpZIGunnj54Hcdun5fOveeOmwVqLonqAs10\n VXJuzvQy0sCic2qYheMgvxp2vC2aenel0HydpIXEfJi+EQo+dOmEQF","X-Received":["by 2002:a05:620a:450f:b0:8ed:3c1:4bd8 with SMTP id\n af79cd13be357-90650c082bfmr19025185a.19.1778099675575;\n Wed, 06 May 2026 13:34:35 -0700 (PDT)","by 2002:a05:620a:450f:b0:8ed:3c1:4bd8 with SMTP id\n af79cd13be357-90650c082bfmr19020285a.19.1778099674996;\n Wed, 06 May 2026 13:34:34 -0700 (PDT)"],"Message-ID":"<41b62537-9348-4dff-ace5-5a525745fb08@redhat.com>","Date":"Wed, 6 May 2026 16:34:33 -0400","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] c++: Reflection vs.\n CLASSTYPE_TYPEINFO_VAR/ANON_AGGR_TYPE_FIELD sharing [PR124991]","To":"Jakub Jelinek <jakub@redhat.com>, Marek Polacek <polacek@redhat.com>","Cc":"gcc-patches@gcc.gnu.org","References":"<afr51pcAuC2Fmubs@tucnak>","From":"Jason Merrill <jason@redhat.com>","In-Reply-To":"<afr51pcAuC2Fmubs@tucnak>","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"V3cg-isxolozht-DxdsPLPkTykGvVDLszjfEZ0xvUQY_1778099676","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"}}]