[{"id":3669215,"web_url":"http://patchwork.ozlabs.org/comment/3669215/","msgid":"<acQVaUaVKegfJu4U@redhat.com>","list_archive_url":null,"date":"2026-03-25T17:03:37","subject":"Re: [RFC PATCH] c++: Implement the data_member_spec API change from\n P3795R1","submitter":{"id":14370,"url":"http://patchwork.ozlabs.org/api/people/14370/","name":"Marek Polacek","email":"polacek@redhat.com"},"content":"On Wed, Mar 25, 2026 at 08:29:27AM +0100, Jakub Jelinek wrote:\n> Hi!\n> \n> https://wg21.link/p3795r1 changes various small things in reflection.\n> Here is just the std::meta::data_member_spec API, which unfortunately\n> is a huge change because we have to adjust a lot of things in the\n> testsuite (and means a flag day for reflection users).  That said,\n> if the change is approved, it would be really bad if the flag day\n> was postponed to GCC 16 -> 17 transition.\n> \n> This patch doesn't add the annotations member and its handling, will\n> do that separately.\n> One disadvantage of this part of the paper is that ADL no longer works\n> to find data_member_spec when one uses just\n> data_member_spec({.type=something,.name=something}).\n> \n> 2026-03-25  Jakub Jelinek  <jakub@redhat.com>\n> \n> libstdc++-v3/\n> \t* include/std/meta (std::meta::data_member_options): Add\n> \ttype member.\n> \t(std::meta::data_member_spec): Remove info argument.\n> gcc/cp/\n> \t* metafns.gperf (enum metafn_kind_args): Add\n> \tMETAFN_KIND_ARGS_DATA_MEMBER_OPTIONS and\n> \tMETAFN_KIND_INFO_DATA_MEMBER_OPTIONS, remove\n> \tMETAFN_KIND_ARGS_TINFO_DATA_MEMBER_OPTIONS and\n> \tMETAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS.\n> \t(data_member_spec): Use METAFN_KIND_INFO_DATA_MEMBER_OPTIONS\n> \trather than METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS.\n> \t* reflect.cc (eval_data_member_spec): Remove type argument,\n> \tread type from options.type.\n> \t(process_metafunction): Adjust assertion for\n> \tMETAFN_KIND_ARG_DATA_MEMBER_OPTIONS.  Adjust eval_data_member_spec\n> \tcaller.\n> \t* metafns.h: Regenerate.\n> gcc/testsuite/\n> \t* g++.dg/reflect/alignment_of1.C: Adjust for data_member_spec\n> \tAPI change.\n> \t* g++.dg/reflect/bit_size_of1.C: Likewise.\n> \t* g++.dg/reflect/can_substitute1.C: Likewise.\n> \t* g++.dg/reflect/complete1.C: Likewise.\n> \t* g++.dg/reflect/data_member_spec1.C: Likewise.\n> \t* g++.dg/reflect/data_member_spec2.C: Likewise.\n> \t* g++.dg/reflect/data_member_spec3.C: Likewise.\n> \t* g++.dg/reflect/data_member_spec4.C: Likewise.\n> \t* g++.dg/reflect/define_aggregate1.C: Likewise.\n> \t* g++.dg/reflect/define_aggregate2.C: Likewise.\n> \t* g++.dg/reflect/define_aggregate4.C: Likewise.\n> \t* g++.dg/reflect/define_aggregate5.C: Likewise.\n> \t* g++.dg/reflect/define_aggregate6.C: Likewise.\n> \t* g++.dg/reflect/display_string_of1.C: Likewise.\n> \t* g++.dg/reflect/eh5.C: Likewise.\n> \t* g++.dg/reflect/has_c_language_linkage1.C: Likewise.\n> \t* g++.dg/reflect/has_default_argument1.C: Likewise.\n> \t* g++.dg/reflect/has_default_member_initializer1.C: Likewise.\n> \t* g++.dg/reflect/has_ellipsis_parameter1.C: Likewise.\n> \t* g++.dg/reflect/has_external_linkage1.C: Likewise.\n> \t* g++.dg/reflect/has_identifier1.C: Likewise.\n> \t* g++.dg/reflect/has_internal_linkage1.C: Likewise.\n> \t* g++.dg/reflect/has_linkage1.C: Likewise.\n> \t* g++.dg/reflect/has_module_linkage1.C: Likewise.\n> \t* g++.dg/reflect/has_parent1.C: Likewise.\n> \t* g++.dg/reflect/has_template_arguments1.C: Likewise.\n> \t* g++.dg/reflect/identifier_of1.C: Likewise.\n> \t* g++.dg/reflect/is_accessible1.C: Likewise.\n> \t* g++.dg/reflect/is_alias_template1.C: Likewise.\n> \t* g++.dg/reflect/is_bit_field1.C: Likewise.\n> \t* g++.dg/reflect/is_class_member1.C: Likewise.\n> \t* g++.dg/reflect/is_class_template1.C: Likewise.\n> \t* g++.dg/reflect/is_complete_type1.C: Likewise.\n> \t* g++.dg/reflect/is_concept1.C: Likewise.\n> \t* g++.dg/reflect/is_const1.C: Likewise.\n> \t* g++.dg/reflect/is_data_member_spec1.C: Likewise.\n> \t* g++.dg/reflect/is_defaulted1.C: Likewise.\n> \t* g++.dg/reflect/is_deleted1.C: Likewise.\n> \t* g++.dg/reflect/is_enumerator1.C: Likewise.\n> \t* g++.dg/reflect/is_explicit_object_parameter1.C: Likewise.\n> \t* g++.dg/reflect/is_function1.C: Likewise.\n> \t* g++.dg/reflect/is_function_parameter1.C: Likewise.\n> \t* g++.dg/reflect/is_function_template1.C: Likewise.\n> \t* g++.dg/reflect/is_mutable_member1.C: Likewise.\n> \t* g++.dg/reflect/is_namespace1.C: Likewise.\n> \t* g++.dg/reflect/is_namespace_alias1.C: Likewise.\n> \t* g++.dg/reflect/is_namespace_member1.C: Likewise.\n> \t* g++.dg/reflect/is_nonstatic_data_member1.C: Likewise.\n> \t* g++.dg/reflect/is_object1.C: Likewise.\n> \t* g++.dg/reflect/is_override1.C: Likewise.\n> \t* g++.dg/reflect/is_static_member1.C: Likewise.\n> \t* g++.dg/reflect/is_template1.C: Likewise.\n> \t* g++.dg/reflect/is_type1.C: Likewise.\n> \t* g++.dg/reflect/is_type_alias1.C: Likewise.\n> \t* g++.dg/reflect/is_user_declared1.C: Likewise.\n> \t* g++.dg/reflect/is_user_provided1.C: Likewise.\n> \t* g++.dg/reflect/is_variable1.C: Likewise.\n> \t* g++.dg/reflect/is_variable_template1.C: Likewise.\n> \t* g++.dg/reflect/is_volatile1.C: Likewise.\n> \t* g++.dg/reflect/mangle1.C: Likewise.\n> \t* g++.dg/reflect/object_of3.C: Likewise.\n> \t* g++.dg/reflect/offset_of1.C: Likewise.\n> \t* g++.dg/reflect/operator_of1.C: Likewise.\n> \t* g++.dg/reflect/p2996-5.C: Likewise.\n> \t* g++.dg/reflect/p3394-1.C: Likewise.\n> \t* g++.dg/reflect/parent_of1.C: Likewise.\n> \t* g++.dg/reflect/range_args.C: Likewise.\n> \t* g++.dg/reflect/reflect_constant_array6.C: Likewise.\n> \t* g++.dg/reflect/return_type_of1.C: Likewise.\n> \t* g++.dg/reflect/size_of1.C: Likewise.\n> \t* g++.dg/reflect/source_location_of1.C: Likewise.\n> \t* g++.dg/reflect/splice1.C: Likewise.\n> \t* g++.dg/reflect/storage_duration2.C: Likewise.\n> \t* g++.dg/reflect/substitute1.C: Likewise.\n> \t* g++.dg/reflect/type_of1.C: Likewise.\n> \t* g++.dg/reflect/u8display_string_of1.C: Likewise.\n> \t* g++.dg/reflect/u8identifier_of1.C: Likewise.\n> \t* g++.dg/reflect/variable_of1.C: Likewise.\n> \t* g++.dg/reflect/visibility1.C: Likewise.\n> \n> --- libstdc++-v3/include/std/meta.jj\t2026-03-12 08:50:32.783085576 +0100\n> +++ libstdc++-v3/include/std/meta\t2026-03-25 08:14:07.297917425 +0100\n> @@ -418,12 +418,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n>  \tinfo _M_unused = {};\n>        };\n>  \n> +      info type;\n>        optional<_Name> name;\n>        optional<int> alignment;\n>        optional<int> bit_width;\n>        bool no_unique_address = false;\n>      };\n> -    consteval info data_member_spec(info, data_member_options);\n> +    consteval info data_member_spec(data_member_options);\n>      consteval bool is_data_member_spec(info);\n>      template<reflection_range _Rg = initializer_list<info>>\n>        consteval info define_aggregate(info, _Rg&&);\n> --- gcc/cp/metafns.gperf.jj\t2026-03-02 07:43:12.343788113 +0100\n> +++ gcc/cp/metafns.gperf\t2026-03-24 23:17:05.964011658 +0100\n> @@ -315,6 +315,7 @@ enum metafn_kind_args {\n>    METAFN_KIND_ARGS_OPERATORS = METAFN_KIND_ARG_OPERATORS,\n>    METAFN_KIND_ARGS_TEMPLATE_PARM = METAFN_KIND_ARG_TEMPLATE_PARM,\n>    METAFN_KIND_ARGS_TEMPLATE_PARM_REF = METAFN_KIND_ARG_TEMPLATE_PARM_REF,\n> +  METAFN_KIND_ARGS_DATA_MEMBER_OPTIONS = METAFN_KIND_ARG_DATA_MEMBER_OPTIONS,\n>    METAFN_KIND_ARGS_INFO_INFO\n>      = (METAFN_KIND_ARG_INFO << METAFN_KIND_SHIFT) | METAFN_KIND_ARG_INFO,\n>    METAFN_KIND_ARGS_TINFO_TINFO\n> @@ -325,9 +326,6 @@ enum metafn_kind_args {\n>    METAFN_KIND_ARGS_INFO_ACCESS_CONTEXT\n>      = (METAFN_KIND_ARG_ACCESS_CONTEXT << METAFN_KIND_SHIFT)\n>        | METAFN_KIND_ARG_INFO,\n> -  METAFN_KIND_ARGS_TINFO_DATA_MEMBER_OPTIONS\n> -    = (METAFN_KIND_ARG_DATA_MEMBER_OPTIONS << METAFN_KIND_SHIFT)\n> -      | METAFN_KIND_ARG_TINFO,\n>    METAFN_KIND_ARGS_INFO_REFLECTION_RANGE\n>      = (METAFN_KIND_ARG_REFLECTION_RANGE << METAFN_KIND_SHIFT)\n>        | METAFN_KIND_ARG_INFO,\n> @@ -370,8 +368,8 @@ enum metafn_kind {\n>    METAFN_KIND_INFO_TINFO_REFLECTION_RANGET\n>      = (METAFN_KIND_ARGS_TINFO_REFLECTION_RANGET << METAFN_KIND_SHIFT)\n>        | METAFN_KIND_RET_INFO,\n> -  METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS\n> -    = (METAFN_KIND_ARGS_TINFO_DATA_MEMBER_OPTIONS << METAFN_KIND_SHIFT)\n> +  METAFN_KIND_INFO_DATA_MEMBER_OPTIONS\n> +    = (METAFN_KIND_ARGS_DATA_MEMBER_OPTIONS << METAFN_KIND_SHIFT)\n>        | METAFN_KIND_RET_INFO,\n>    METAFN_KIND_INFO_REFLECTION_RANGET\n>      = (METAFN_KIND_ARGS_REFLECTION_RANGET << METAFN_KIND_SHIFT)\n> @@ -572,7 +570,7 @@ reflect_object, METAFN_REFLECT_OBJECT, M\n>  reflect_function, METAFN_REFLECT_FUNCTION, METAFN_KIND_INFO_TEMPLATE_PARM_REF,\n>  reflect_constant_string, METAFN_REFLECT_CONSTANT_STRING, METAFN_KIND_INFO_INPUT_RANGE,\n>  reflect_constant_array, METAFN_REFLECT_CONSTANT_ARRAY, METAFN_KIND_INFO_INPUT_RANGE,\n> -data_member_spec, METAFN_DATA_MEMBER_SPEC, METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS,\n> +data_member_spec, METAFN_DATA_MEMBER_SPEC, METAFN_KIND_INFO_DATA_MEMBER_OPTIONS,\n>  is_data_member_spec, METAFN_IS_DATA_MEMBER_SPEC, METAFN_KIND_BOOL_INFO,\n>  define_aggregate, METAFN_DEFINE_AGGREGATE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,\n>  is_void_type, METAFN_IS_VOID_TYPE, METAFN_KIND_BOOL_TINFO,\n> --- gcc/cp/reflect.cc.jj\t2026-03-24 11:08:32.156754072 +0100\n> +++ gcc/cp/reflect.cc\t2026-03-25 08:15:13.865777063 +0100\n> @@ -5549,14 +5549,10 @@ eval_variant_alternative (location_t loc\n>  \n\nThe comment should be updated too (add the ANN etc.).\n\n>  static tree\n>  eval_data_member_spec (location_t loc, const constexpr_ctx *ctx,\n> -\t\t       tree type, tree opts, bool *non_constant_p,\n> +\t\t       tree opts, bool *non_constant_p,\n>  \t\t       bool *overflow_p, tree *jump_target, tree fun)\n>  {\n> -  type = strip_typedefs (type);\n> -  if (!TYPE_OBJ_P (type) && !TYPE_REF_P (type))\n> -    return throw_exception (loc, ctx, \"type is not object or reference type\",\n> -\t\t\t    fun, non_constant_p, jump_target);\n> -  opts = convert_from_reference (opts);\n> +  tree type = NULL_TREE;  opts = convert_from_reference (opts);\n\nPlease put the second stmt on its own line.\n\n>    if (!CLASS_TYPE_P (TREE_TYPE (opts)))\n>      {\n>      fail:\n> @@ -5564,12 +5560,14 @@ eval_data_member_spec (location_t loc, c\n>        *non_constant_p = true;\n>        return NULL_TREE;\n>      }\n> -  tree args[5] = { type, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE };\n> +  tree args[5] = { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE };\n>    for (tree field = next_aggregate_field (TYPE_FIELDS (TREE_TYPE (opts)));\n>         field; field = next_aggregate_field (DECL_CHAIN (field)))\n>      if (tree name = DECL_NAME (field))\n>        {\n> -\tif (id_equal (name, \"name\"))\n> +\tif (id_equal (name, \"type\"))\n> +\t  args[0] = field;\n> +\telse if (id_equal (name, \"name\"))\n>  \t  args[1] = field;\n>  \telse if (id_equal (name, \"alignment\"))\n>  \t  args[2] = field;\n> @@ -5578,12 +5576,35 @@ eval_data_member_spec (location_t loc, c\n>  \telse if (id_equal (name, \"no_unique_address\"))\n>  \t  args[4] = field;\n>        }\n> -  for (int i = 1; i < 5; ++i)\n> +  for (int i = 0; i < 5; ++i)\n>      {\n>        if (args[i] == NULL_TREE)\n>  \tgoto fail;\n>        tree opt = build3 (COMPONENT_REF, TREE_TYPE (args[i]), opts, args[i],\n>  \t\t\t NULL_TREE);\n> +      if (i == 0)\n> +\t{\n> +\t  /* The type handling is simple.  */\n> +\t  if (!REFLECTION_TYPE_P (TREE_TYPE (opt)))\n> +\t    goto fail;\n> +\t  opt = cxx_eval_constant_expression (ctx, opt, vc_prvalue,\n> +\t\t\t\t\t      non_constant_p, overflow_p,\n> +\t\t\t\t\t      jump_target);\n> +\t  if (*jump_target || *non_constant_p)\n> +\t    return NULL_TREE;\n> +\t  if (TREE_CODE (opt) != REFLECT_EXPR)\n> +\t    goto fail;\n> +\t  args[i] = type = REFLECT_EXPR_HANDLE (opt);\n> +\t  if (eval_is_type (type) != boolean_true_node)\n> +\t    return throw_exception_nontype (loc, ctx, fun, non_constant_p,\n> +\t\t\t\t\t    jump_target);\n> +\t  type = strip_typedefs (type);\n> +\t  if (!TYPE_OBJ_P (type) && !TYPE_REF_P (type))\n> +\t    return throw_exception (loc, ctx,\n> +\t\t\t\t    \"type is not object or reference type\",\n\nTo me it looks strange to say that \"type is not object\".\n\nMarek","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=dbJT55hk;\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=dbJT55hk","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 4fgtYJ2Wpzz1xy3\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 26 Mar 2026 04:04:19 +1100 (AEDT)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id D99744BA9036\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 25 Mar 2026 17:04:16 +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 B66AA4B9DB6D\n for <gcc-patches@gcc.gnu.org>; Wed, 25 Mar 2026 17:03:45 +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-182-AkGJw0H3NMSIaBEiD2u1VA-1; Wed, 25 Mar 2026 13:03:43 -0400","by mail-qk1-f197.google.com with SMTP id\n af79cd13be357-8cfdc479f68so23992485a.1\n for <gcc-patches@gcc.gnu.org>; Wed, 25 Mar 2026 10:03:42 -0700 (PDT)","from redhat.com ([2603:7000:9500:10::1db4])\n by smtp.gmail.com with ESMTPSA id\n af79cd13be357-8d00e5003c4sm26058685a.35.2026.03.25.10.03.39\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 25 Mar 2026 10:03:39 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org D99744BA9036","OpenDKIM Filter v2.11.0 sourceware.org B66AA4B9DB6D"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org B66AA4B9DB6D","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org B66AA4B9DB6D","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774458225; cv=none;\n b=XhtjFzMDJ9K4PACLWOFU1nD83cdVyiSp1FWzV95Kuw6ipRU18Sm4NVqolBcP1tKy0/Ah6Iy2idqGg0h8JMWtGmbTzwOWDc0VMmIgrh+FvZ344VZyr0x9UtF1sZhHBUezkvLGJSVGt2e35LuXn2RBEt61zrD9whsDqKuYvWBD33M=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1774458225; c=relaxed/simple;\n bh=MnfRZwZLMulFInWPyWXWpzXxPd5y0loSsGBQ6FIgyLU=;\n h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version;\n b=TW7v2H3MyIYyCVrwQERi9MQ7bgTMb+eVABP9OsaJA670iUC3G72YgQQJQ3s9paUQoE+AZdRycTBCIsyqQVBRoxZFb3F7UxNVPgBpmXR0beYMIjWJRes4QUwaNJNUwrt6f2FGSDcx8po6OR0+p8tI6bk1k+m7O7GM812qdqipa1Y=","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=1774458225;\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=4zI/VxbLWZQhCafdUMsNgwNba0y+oMP/ZMb95fXa1bc=;\n b=dbJT55hkA1TunVL3DrQYJXf2hjsqkqOql0MKTvJp2g3QwruAji6uMsUF8j5kWib85SOejb\n 6P+JW3IfbOf4JHHXdh5KeR3YBo8Byeq8S2P2HvLR3CXJJeeeQVQXAtf0h3EpYHTtBZdhmq\n JjW/xETPGM0HFAlOwyTobWz6oF+wZhs=","X-MC-Unique":"AkGJw0H3NMSIaBEiD2u1VA-1","X-Mimecast-MFC-AGG-ID":"AkGJw0H3NMSIaBEiD2u1VA_1774458222","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1774458222; x=1775063022;\n h=user-agent:in-reply-to:content-disposition:mime-version:references\n :message-id:subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=4zI/VxbLWZQhCafdUMsNgwNba0y+oMP/ZMb95fXa1bc=;\n b=Syt0TQwEe7EPJNU8b1Lej3sJEy86XpHeNGrI56Ylb4wBA0VFsoNj4Qi0TeUWM9v3Ay\n U1ZzFxpXD2Iw4TYOCgRgxh2/AtPnrHArBOKHvQ/M1GZTLpiWgZFWdTo8db2pXd2IFcwO\n wVLE6IeQQt+6lJgTjRIwuN9Thnh8oIXmk9mStahfiUBOIEdn2P92l71E3wnpUqZqZlg+\n YLVPScQCOIPdkczxLvDq1dOGG/co+DaYwjANCb9fOJ0WMz3X42pIAyIlM0OHEyF79XS+\n lB2WZkBeGe5cyCFSEIeWMGI4YuJXex8pTne42tiyOgbyd3rJri4SM7GStboK+jp5+Tj6\n uJtQ==","X-Forwarded-Encrypted":"i=1;\n AJvYcCVoK++jj94LiCMxSAFwdJFuBX0AcvwRxOoHUzm26l8w3D8GRsUveNDMrRDtDfxClt+GVOmC7utMpN2xbA==@gcc.gnu.org","X-Gm-Message-State":"AOJu0YzCWnjwNYrju4XjNs7cbKLfL0hhqoiI04E+br19ITNgbSXzTVPE\n X/wR4Vy18JzWsh6UsyM89sltEHOTUf5p11VobGevinZEa20MJ7Uc4Po7HU6NVLUEpoBXWB6KIhM\n qbxi7AWcKW9xJh3538MBFeIlgMnM7n4D/BX3CC+gf3Ur4FYTyCmea8bwakgA=","X-Gm-Gg":"ATEYQzxAReD2oADLNzGe65I6q1H4wyOTPx/yT0AGhyW4ZoEWlZtNvrkjsF9SCLcxGjE\n hFkoV0GZYwVBYVLMudc3Ze/1gK6JjfYRbjNfQz0lzvIl8fo+x1Ph3sJ+8qS7njAssz63TOXHPyo\n LKx+VeQMpBzJDrQ1JkotjHnGa6IvB+7sSYZp42TtvfRwF7YLWc8BtM3WtvaJYMhmEV7haXFgktU\n N7VaZ9XC82Ljw46ecoPkcOJ/+4fYI+tAmXpUAmCnkmbeADeiWpcmecQ3gUSD20SFAk66UGc2Lzt\n fkz/CmUe++VzkV+MdaGt8ia+bIpUhVnT7y/pWUC+ClFi5Iq+ezmn8UjWOlulwww90/n2UFvfhyn\n KNg==","X-Received":["by 2002:a05:620a:294f:b0:8c7:a53:4d17 with SMTP id\n af79cd13be357-8d000f538camr573835285a.21.1774458221339;\n Wed, 25 Mar 2026 10:03:41 -0700 (PDT)","by 2002:a05:620a:294f:b0:8c7:a53:4d17 with SMTP id\n af79cd13be357-8d000f538camr573827585a.21.1774458220713;\n Wed, 25 Mar 2026 10:03:40 -0700 (PDT)"],"Date":"Wed, 25 Mar 2026 13:03:37 -0400","From":"Marek Polacek <polacek@redhat.com>","To":"Jakub Jelinek <jakub@redhat.com>","Cc":"Jason Merrill <jason@redhat.com>, gcc-patches@gcc.gnu.org","Subject":"Re: [RFC PATCH] c++: Implement the data_member_spec API change from\n P3795R1","Message-ID":"<acQVaUaVKegfJu4U@redhat.com>","References":"<acOO15PiYmW5H1-F@tucnak>","MIME-Version":"1.0","In-Reply-To":"<acOO15PiYmW5H1-F@tucnak>","User-Agent":"Mutt/2.3.0 (2026-01-25)","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"hvfcy5bjNXIfwAaMswpF_isK93lzCmI3UMFsiwVJEjI_1774458222","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","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":3669236,"web_url":"http://patchwork.ozlabs.org/comment/3669236/","msgid":"<acQco3agCAeyc283@tucnak>","list_archive_url":null,"date":"2026-03-25T17:34:27","subject":"Re: [RFC PATCH] c++: Implement the data_member_spec API change from\n P3795R1","submitter":{"id":671,"url":"http://patchwork.ozlabs.org/api/people/671/","name":"Jakub Jelinek","email":"jakub@redhat.com"},"content":"On Wed, Mar 25, 2026 at 01:03:37PM -0400, Marek Polacek wrote:\n> > --- gcc/cp/reflect.cc.jj\t2026-03-24 11:08:32.156754072 +0100\n> > +++ gcc/cp/reflect.cc\t2026-03-25 08:15:13.865777063 +0100\n> > @@ -5549,14 +5549,10 @@ eval_variant_alternative (location_t loc\n> >  \n> \n> The comment should be updated too (add the ANN etc.).\n\nI was deferring that to the second patch and until the final wording\nis in there, it changed today several times.\n\n> >  static tree\n> >  eval_data_member_spec (location_t loc, const constexpr_ctx *ctx,\n> > -\t\t       tree type, tree opts, bool *non_constant_p,\n> > +\t\t       tree opts, bool *non_constant_p,\n> >  \t\t       bool *overflow_p, tree *jump_target, tree fun)\n> >  {\n> > -  type = strip_typedefs (type);\n> > -  if (!TYPE_OBJ_P (type) && !TYPE_REF_P (type))\n> > -    return throw_exception (loc, ctx, \"type is not object or reference type\",\n> > -\t\t\t    fun, non_constant_p, jump_target);\n> > -  opts = convert_from_reference (opts);\n> > +  tree type = NULL_TREE;  opts = convert_from_reference (opts);\n> \n> Please put the second stmt on its own line.\n\nBut this whole patch is likely going to be thrown away, LEWG approved reversion\nof the data_member_spec (^^int, { .name = \"_\" }) to\ndata_member_spec ({ .type = ^^int, .name = \"_\" }) today.\nThough ANN remains (the other patch posted today).\n\n> To me it looks strange to say that \"type is not object\".\n\nPreexisting, but you're right.\n\n\tJakub","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=Y1V/erhH;\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=Y1V/erhH","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 4fgvDz0Mkxz1xy1\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 26 Mar 2026 04:35:15 +1100 (AEDT)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 128F04BB58D6\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 25 Mar 2026 17:35:13 +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 4E5064BB5891\n for <gcc-patches@gcc.gnu.org>; Wed, 25 Mar 2026 17:34:34 +0000 (GMT)","from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-613-G-pLhhKlMsOZugHERhlqyQ-1; Wed,\n 25 Mar 2026 13:34:32 -0400","from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id C882A1800345\n for <gcc-patches@gcc.gnu.org>; Wed, 25 Mar 2026 17:34:31 +0000 (UTC)","from tucnak.zalov.cz (unknown [10.45.225.193])\n by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with\n ESMTPS\n id BBCE91800673; Wed, 25 Mar 2026 17:34:30 +0000 (UTC)","from tucnak.zalov.cz (localhost [127.0.0.1])\n by tucnak.zalov.cz (8.18.1/8.18.1) with ESMTPS id 62PHYRWE3827852\n (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT);\n Wed, 25 Mar 2026 18:34:27 +0100","(from jakub@localhost)\n by tucnak.zalov.cz (8.18.1/8.18.1/Submit) id 62PHYRSu3827851;\n Wed, 25 Mar 2026 18:34:27 +0100"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 128F04BB58D6","OpenDKIM Filter v2.11.0 sourceware.org 4E5064BB5891"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 4E5064BB5891","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 4E5064BB5891","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774460074; cv=none;\n b=MRimY+6u4sVdBII1wghjLYZaWz5arOEjFfVzp72kezz9Gb0GRJ2o9JGO0CBDwP3mxuMq7GZ7DYWFVJyo3QkGmGosa5RrgVdTVhbxaq1DnhFL+QZasOoUBqrPF0zyHeE47gf4YyzEvQDr9TMGA94g8eGikOYl5vZGZbXI4BbkIjo=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1774460074; c=relaxed/simple;\n bh=GvBqAdyfPReqFoXiEQZDA766Gob53XmjB708Owl5tV8=;\n h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version;\n b=YCorGSg8DacyaKStKXE/wu9AWqY6fPUmYTBIMtzOljL5ypqxAuUqrNt70tfQ1vBKujwBC9abARgo4EwffSRO8R9yugYjBzKgb/XjGDRB6JkEAPaTFV7ajBps6g6QUM/5FYdF9mnjdHJ672Hilcrcg6zp1pOdLrfuTI2/H+XYIaQ=","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=1774460073;\n h=from:from:reply-to:reply-to:subject:subject:date:date:\n message-id:message-id:to:to:cc:cc:mime-version:mime-version:\n content-type:content-type:in-reply-to:in-reply-to:  references:references;\n bh=hCNbGSq/yKybDbKh646gHcaPXuiyp3zTU8nAEK7/ntQ=;\n b=Y1V/erhHFiPHpEpP02JegK5XUrErYMa/e/o83SqhdO7Fagwt7yN/78Vx5KcS0x/Sv3pWtA\n 9s2v9H27TaHWkCP/F1EQTxFN8rIWYcca/d9eE2WF52FnmVid5+h3htWBjmnHuM6mqaQDZ3\n 3kj9gZ7r9WN4vRG3d0nExwZXmz+lDSE=","X-MC-Unique":"G-pLhhKlMsOZugHERhlqyQ-1","X-Mimecast-MFC-AGG-ID":"G-pLhhKlMsOZugHERhlqyQ_1774460072","Date":"Wed, 25 Mar 2026 18:34:27 +0100","From":"Jakub Jelinek <jakub@redhat.com>","To":"Marek Polacek <polacek@redhat.com>","Cc":"Jason Merrill <jason@redhat.com>, gcc-patches@gcc.gnu.org","Subject":"Re: [RFC PATCH] c++: Implement the data_member_spec API change from\n P3795R1","Message-ID":"<acQco3agCAeyc283@tucnak>","References":"<acOO15PiYmW5H1-F@tucnak>\n <acQVaUaVKegfJu4U@redhat.com>","MIME-Version":"1.0","In-Reply-To":"<acQVaUaVKegfJu4U@redhat.com>","X-Scanned-By":"MIMEDefang 3.4.1 on 10.30.177.93","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"5POgbgHTVgSMRf8SN8xoiqJSdDdHhlF6O1K58DtFjNM_1774460072","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","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>","Reply-To":"Jakub Jelinek <jakub@redhat.com>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}}]