[{"id":3684762,"web_url":"http://patchwork.ozlabs.org/comment/3684762/","msgid":"<1e1ebdac-a2f6-466b-a3b4-9c39a11cb2a1@redhat.com>","list_archive_url":null,"date":"2026-04-30T14:50:52","subject":"Re: [PATCH] c++/reflection: propagate cv-quals for SPLICE_SCOPE\n [PR125096]","submitter":{"id":4337,"url":"http://patchwork.ozlabs.org/api/people/4337/","name":"Jason Merrill","email":"jason@redhat.com"},"content":"On 4/29/26 6:03 PM, Marek Polacek wrote:\n> Regtest on x86_64-pc-linux-gnu in progress but reflect/* has passed.\n> Ok for trunk/16.2?\n\nOK.\n\n> -- >8 --\n> tsubst_splice_scope isn't propagating cv-quals from the template tree\n> to the result, which means wrongly failed asserts in the new test due to\n> a missing 'const'.  So let's add the cv-quals like we do in so many\n> other places in tsubst.\n> \n> \tPR c++/125096\n> \n> gcc/cp/ChangeLog:\n> \n> \t* pt.cc (tsubst_splice_scope): Don't return early for\n> \tdependent_splice_p.  Propagate cv-qualifiers from the\n> \tSPLICE_SCOPE to the result.\n> \t* reflect.cc (valid_splice_scope_p): Accept SPLICE_SCOPE.\n> \n> gcc/testsuite/ChangeLog:\n> \n> \t* g++.dg/reflect/mangle4.C: Move dg-error.\n> \t* g++.dg/reflect/dep16.C: New test.\n> ---\n>   gcc/cp/pt.cc                           |  8 ++++++--\n>   gcc/cp/reflect.cc                      |  3 ++-\n>   gcc/testsuite/g++.dg/reflect/dep16.C   | 28 ++++++++++++++++++++++++++\n>   gcc/testsuite/g++.dg/reflect/mangle4.C |  5 ++---\n>   4 files changed, 38 insertions(+), 6 deletions(-)\n>   create mode 100644 gcc/testsuite/g++.dg/reflect/dep16.C\n> \n> diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc\n> index 9a5eb7ef9b0..6992b5196fe 100644\n> --- a/gcc/cp/pt.cc\n> +++ b/gcc/cp/pt.cc\n> @@ -16904,8 +16904,8 @@ tsubst_splice_scope (tree t, tree args, tsubst_flags_t complain, tree in_decl)\n>       return r;\n>     const bool type_p = SPLICE_SCOPE_TYPE_P (t);\n>     if (dependent_splice_p (r))\n> -    return make_splice_scope (r, type_p);\n> -  if (type_p && ctad_template_p (r))\n> +    r = make_splice_scope (r, type_p);\n> +  else if (type_p && ctad_template_p (r))\n>       r = make_template_placeholder (r);\n>     if (type_p\n>         ? !valid_splice_type_p (r)\n> @@ -16925,6 +16925,10 @@ tsubst_splice_scope (tree t, tree args, tsubst_flags_t complain, tree in_decl)\n>         return error_mark_node;\n>       }\n>   \n> +  if (type_p)\n> +    r = cp_build_qualified_type (r, cp_type_quals (t) | cp_type_quals (r),\n> +\t\t\t\t complain | tf_ignore_bad_quals);\n> +\n>     return r;\n>   }\n>   \n> diff --git a/gcc/cp/reflect.cc b/gcc/cp/reflect.cc\n> index c6b0f6f2bd1..3b9f56ea548 100644\n> --- a/gcc/cp/reflect.cc\n> +++ b/gcc/cp/reflect.cc\n> @@ -8912,7 +8912,8 @@ valid_splice_scope_p (const_tree t)\n>   {\n>     return (CLASS_TYPE_P (t)\n>   \t  || TREE_CODE (t) == ENUMERAL_TYPE\n> -\t  || TREE_CODE (t) == NAMESPACE_DECL);\n> +\t  || TREE_CODE (t) == NAMESPACE_DECL\n> +\t  || TREE_CODE (t) == SPLICE_SCOPE);\n>   }\n>   \n>   /* Return true if T is a valid result of the splice in a class member access,\n> diff --git a/gcc/testsuite/g++.dg/reflect/dep16.C b/gcc/testsuite/g++.dg/reflect/dep16.C\n> new file mode 100644\n> index 00000000000..70ec9bf4858\n> --- /dev/null\n> +++ b/gcc/testsuite/g++.dg/reflect/dep16.C\n> @@ -0,0 +1,28 @@\n> +// PR c++/125096\n> +// { dg-do compile { target c++26 } }\n> +// { dg-additional-options \"-freflection\" }\n> +\n> +#include <meta>\n> +#include <vector>\n> +\n> +namespace ctp {\n> +    template <class T> struct Reflect;\n> +\n> +    namespace impl {\n> +        template <class T> using custom_target = Reflect<T>::target_type;\n> +    }\n> +\n> +    template <class T>\n> +    using target = [: is_scalar_type(^^T) ? ^^T : substitute(^^impl::custom_target, {^^T}) :];\n> +\n> +    template <class T>\n> +    struct Reflect<std::vector<T>> {\n> +        using underlying = target<T> const;\n> +        using target_type = std::span<const target<T>>;\n> +    };\n> +}\n> +\n> +static_assert(dealias(^^ctp::target<int>) == ^^int);\n> +static_assert(dealias(^^ctp::target<std::vector<int>>) == ^^std::span<int const>);\n> +static_assert(dealias(^^ctp::Reflect<std::vector<int>>::underlying) == ^^int const);\n> +static_assert(dealias(^^ctp::Reflect<std::vector<int>>::target_type) == ^^std::span<int const>);\n> diff --git a/gcc/testsuite/g++.dg/reflect/mangle4.C b/gcc/testsuite/g++.dg/reflect/mangle4.C\n> index 3880468daff..f9ac44ba869 100644\n> --- a/gcc/testsuite/g++.dg/reflect/mangle4.C\n> +++ b/gcc/testsuite/g++.dg/reflect/mangle4.C\n> @@ -20,7 +20,6 @@ template<random_access_iterator I>\n>   }\n>   \n>   int main() {\n> -  // ??? It's not clear which of these should error.\n> -  std::default_accessor<int>       _ = std::iterator_accessor<int*>();\n> -  std::default_accessor<const int> _ = std::iterator_accessor<int*>(); // { dg-error \"conversion\" }\n> +  std::default_accessor<int>       _ = std::iterator_accessor<int*>(); // { dg-error \"conversion\" }\n> +  std::default_accessor<const int> _ = std::iterator_accessor<int*>();\n>   }\n> \n> base-commit: f4b5c2bf40d68e1666c83556a236a53cdddc34a2","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=QeXKjbdN;\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=QeXKjbdN","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 [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 4g5xvX5T9Lz1xqf\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 01 May 2026 00:51:35 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 544EA436F3DE\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 14:51:32 +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 A2660436F3D6\n for <gcc-patches@gcc.gnu.org>; Thu, 30 Apr 2026 14:50:58 +0000 (GMT)","from mail-lj1-f197.google.com (mail-lj1-f197.google.com\n [209.85.208.197]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-503-owRa5XS0OBGyLnnztsISTw-1; Thu, 30 Apr 2026 10:50:56 -0400","by mail-lj1-f197.google.com with SMTP id\n 38308e7fff4ca-38e83f048bbso4933511fa.2\n for <gcc-patches@gcc.gnu.org>; Thu, 30 Apr 2026 07:50:56 -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 38308e7fff4ca-39361300c88sm200321fa.25.2026.04.30.07.50.53\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Thu, 30 Apr 2026 07:50:53 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 544EA436F3DE","OpenDKIM Filter v2.11.0 sourceware.org A2660436F3D6"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org A2660436F3D6","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org A2660436F3D6","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777560658; cv=none;\n b=yBiVzqoboA2l1xUbR3Xa0FE+TlxN6g9b0XHWgg53J2457blorjwW4C0mmIfDT9LEMo9UrWVuhYCDlr4smVTi/inNdPeVZssWixyAetDA4n0zbp8/h6J2sgZEDqJY/swt9j5DTViBhBEhclUTyOIc/qm3HvWPCQbN5h9+bxXBCZQ=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777560658; c=relaxed/simple;\n bh=1DTfsj4L9RwH2pWPAmkiZNL+rBgn2XiB86POEjR9WsY=;\n h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From;\n b=IAXMnIphhL58mBdk81z3UW7/9EZQ0keCnhszZTrlVdHZzfNDBOgHnUTjfASzMhs7OxfzxrY6iYrfVYgF10WH8HkoQ5luA86yK0blUVR3IMsMOdXIz/ymdeFxnxukjLjkFopo759HQFitH7URrAkSPf0Bi2KFtnktUlOt0VpC78s=","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=1777560658;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to: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=E0+SBAXszOmFlVhNsyAKr+96CvOLPfPV0logtKdKywg=;\n b=QeXKjbdNjmeNyirC2lOP3b3R8kRdEAJyVHFqVRwlGi3P1CeUv7H1iWey+lzDoQW8Gh5Nnn\n ro22ujKE0dCGiFeg9eDnD/7v2k+8Hx2FVXYm0bOV0VmquaZwu5J4W/z5SuRWEu8KhmmCfF\n aR0efqcPJaQlQyOU/3WulGs1a0kwco4=","X-MC-Unique":"owRa5XS0OBGyLnnztsISTw-1","X-Mimecast-MFC-AGG-ID":"owRa5XS0OBGyLnnztsISTw_1777560655","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777560655; x=1778165455;\n h=content-transfer-encoding:in-reply-to:from:content-language\n :references: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=E0+SBAXszOmFlVhNsyAKr+96CvOLPfPV0logtKdKywg=;\n b=lWgjJ7kpxEzFhzMGiIvwrKEsQmkPsFiQ4ME/Rtgn3g80PW4tTZDbhZr74dy06UAWsu\n ISPy6UDMMyGXkR0dEhssf1n4V36+/nZYtWFb6xy3t5Vye/DTP0ZwKe0jxtiZRRlnGoy6\n aLEIECXoX9VwXbtXimaYMqD1LXBycWKTwUZomjTPWZNYIXBZeIqE9EjETxNGnffvr0BW\n AL9xRWPISqVUZMrSw8zGrbUZjVJh34ojRLLREjh5eRjF+ujviq/tzMSjoEtw7yAisCjd\n DQihb9RmdzqgT3/gBv0Piyt+myoGlv4YlDLvXyt781Qszvfsik1pR72ufYkSWhEBl+jZ\n eJ7Q==","X-Forwarded-Encrypted":"i=1;\n AFNElJ+eEVQL1wbtPGnL4tl9WC7XaN4d9LsU/IFPNDwGyyabh8DXRxferVsWGxSoZOadGMfuU6M9htpBTNxfdA==@gcc.gnu.org","X-Gm-Message-State":"AOJu0YxvRSRZbCLb9Q0X6H/MElZLjok62EJh2PoJAsk8ZQHUMdbvD6A5\n 1LDIufjeJxpZ4QvvsjMOAtiq8CMiRzYi4yzevyvSfmhoPxJOcJS7enrzEAAUOz+Ryyx28Eg7KKy\n KnIzu6WTJ3hPnSz52WYn8ncE46h4f1O+X56yZJqf+r33L3TP13HBxNZPcWis=","X-Gm-Gg":"AeBDiesftRvHZ3FOzLW+B10RlEJshjSNlEZ+LoS9SQ6Yv2kvPQwSvtcaioHjBQWuZOg\n z9O/g381/0KbH7URdCNinj4/ZH25FuhdjvDtozPCba5N4mPZU6rsPefCBh7ac+Sgbi39S4/Wwan\n duUxx25xclbdj9cWYtS57j2QzaewgAstMyusnFaoA2cPYkIobNkxWff/UGYeOGt3HQUchD8XPvj\n d7wmyr9/EpZE5eaSXiSS/Fe0zQI+ZACnDZv68AtZaWpUCuYnfykwefpYrNTjMVVOyunp7schXek\n cKI4ITzy9a8d/Ida670N5wr9hs4EXEoI4xLofGwqZgG6XMqdebttw/Bni8wn7znwPZqcqOpOK2P\n a7UdAiQMjoWL68DAF3dx+5+Gur/T9zmigsB3WspOvXuZGxn5CANluvz0bdBE6unztra2Jk9UetI\n YnnizUiSRND78DGx+Q8PGClFiSWhO7OG0EUsvnD3tplA==","X-Received":["by 2002:a2e:ad03:0:b0:38b:f632:e0fc with SMTP id\n 38308e7fff4ca-3934de6fffbmr13747411fa.1.1777560654909;\n Thu, 30 Apr 2026 07:50:54 -0700 (PDT)","by 2002:a2e:ad03:0:b0:38b:f632:e0fc with SMTP id\n 38308e7fff4ca-3934de6fffbmr13747281fa.1.1777560654280;\n Thu, 30 Apr 2026 07:50:54 -0700 (PDT)"],"Message-ID":"<1e1ebdac-a2f6-466b-a3b4-9c39a11cb2a1@redhat.com>","Date":"Thu, 30 Apr 2026 10:50:52 -0400","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] c++/reflection: propagate cv-quals for SPLICE_SCOPE\n [PR125096]","To":"Marek Polacek <polacek@redhat.com>, GCC Patches <gcc-patches@gcc.gnu.org>","References":"<20260429220337.494176-1-polacek@redhat.com>","From":"Jason Merrill <jason@redhat.com>","In-Reply-To":"<20260429220337.494176-1-polacek@redhat.com>","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"kjHKLbL_kFwiVl_DIiasMTM6RIIMWcrbmomqd4EMKrA_1777560655","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"}}]