[{"id":3673797,"web_url":"http://patchwork.ozlabs.org/comment/3673797/","msgid":"<7b51ad8c-ea46-457d-ad8b-9aa238a2e41e@redhat.com>","list_archive_url":null,"date":"2026-04-06T16:37:27","subject":"Re: [PATCH] c++, v2: Fix up handling of for-range-decls of expansion\n stmt [PR124488]","submitter":{"id":4337,"url":"http://patchwork.ozlabs.org/api/people/4337/","name":"Jason Merrill","email":"jason@redhat.com"},"content":"On 4/6/26 2:16 AM, Jakub Jelinek wrote:\n> On Fri, Apr 03, 2026 at 06:03:22PM -0400, Jason Merrill wrote:\n>>> +  if (VAR_P (range_decl))\n>>> +    {\n>>> +      DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (range_decl) = 1;\n>>> +      if (decl_maybe_constant_var_p (range_decl)\n>>> +\t  /* FIXME setting TREE_CONSTANT on refs breaks the back end.  */\n>>> +\t  && !TYPE_REF_P (TREE_TYPE (range_decl)))\n>>> +\tTREE_CONSTANT (range_decl) = true;\n>>> +      /* Make it value dependent.  */\n>>> +      retrofit_lang_decl (range_decl);\n>>> +      SET_DECL_DEPENDENT_INIT_P (range_decl, 1);\n>>> +      DECL_INITIAL (range_decl) = for_range_identifier;\n>>\n>> Why is the dummy DECL_INITIAL needed as well as DECL_DEPENDENT_INIT_P?\n> \n> I was just afraid something might have called value_dependent_expression_p\n> also on the DECL_INITIAL and for NULL_TREE it returns false.\n> \n> But I have nothing in the testsuite that would need it, so here is an\n> updated patch without that.\n> \n> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?\n\nOK.\n\n> 2026-04-06  Jakub Jelinek  <jakub@redhat.com>\n> \n> \tPR c++/124488\n> \t* parser.cc (cp_parser_expansion_statement): Set\n> \tDECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P, DECL_DEPENDENT_INIT_P and\n> \tif maybe constant non-reference TREE_CONSTANT on range_decl.\n> \t* pt.cc (tsubst_stmt) <case TEMPLATE_FOR_STMT>: Set\n> \tDECL_DEPENDENT_INIT_P on decl.\n> \n> \t* g++.dg/cpp26/expansion-stmt33.C: New test.\n> \n> --- gcc/cp/parser.cc.jj\t2026-03-18 06:35:08.369968785 +0100\n> +++ gcc/cp/parser.cc\t2026-03-20 10:24:40.519275212 +0100\n> @@ -16677,6 +16677,20 @@ cp_parser_expansion_statement (cp_parser\n>     TEMPLATE_FOR_EXPR (r) = expansion_init;\n>     TEMPLATE_FOR_BODY (r) = do_pushlevel (sk_block);\n>   \n> +  /* We don't know yet if range_decl will be initialized by constant\n> +     expression or not.  */\n> +  if (VAR_P (range_decl))\n> +    {\n> +      DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (range_decl) = 1;\n> +      if (decl_maybe_constant_var_p (range_decl)\n> +\t  /* FIXME setting TREE_CONSTANT on refs breaks the back end.  */\n> +\t  && !TYPE_REF_P (TREE_TYPE (range_decl)))\n> +\tTREE_CONSTANT (range_decl) = true;\n> +      /* Make it value dependent.  */\n> +      retrofit_lang_decl (range_decl);\n> +      SET_DECL_DEPENDENT_INIT_P (range_decl, 1);\n> +    }\n> +\n>     /* Parse the body of the expansion-statement.  */\n>     parser->in_statement = IN_EXPANSION_STMT;\n>     bool prev = note_iteration_stmt_body_start ();\n> --- gcc/cp/pt.cc.jj\t2026-03-18 06:35:08.372968734 +0100\n> +++ gcc/cp/pt.cc\t2026-03-20 10:24:49.890114568 +0100\n> @@ -19776,6 +19776,11 @@ tsubst_stmt (tree t, tree args, tsubst_flags_t complain, tree in_decl)\n>   \t      orig_decl = TREE_VEC_ELT (orig_decl, 0);\n>   \t    tree decl = tsubst (orig_decl, args, complain, in_decl);\n>   \t    maybe_push_decl (decl);\n> +\t    if (VAR_P (decl))\n> +\t      {\n> +\t\tretrofit_lang_decl (decl);\n> +\t\tSET_DECL_DEPENDENT_INIT_P (decl, 1);\n> +\t      }\n>   \n>   \t    cp_decomp decomp_d, *decomp = NULL;\n>   \t    if (DECL_DECOMPOSITION_P (decl))\n> --- gcc/testsuite/g++.dg/cpp26/expansion-stmt33.C.jj\t2026-03-20 10:02:54.569810934 +0100\n> +++ gcc/testsuite/g++.dg/cpp26/expansion-stmt33.C\t2026-03-20 10:27:18.603565158 +0100\n> @@ -0,0 +1,17 @@\n> +// PR c++/124488\n> +// { dg-do compile { target c++11 } }\n> +// { dg-options \"\" }\n> +\n> +void\n> +foo ()\n> +{\n> +  template for (constexpr int a : { 42 })\t// { dg-warning \"'template for' only available with\" \"\" { target c++23_down } }\n> +    auto b = [] () { return a; };\n> +}\n> +\n> +void\n> +bar (int x)\n> +{\n> +  template for (const int a : { 42, ++x, 5 })\t// { dg-warning \"'template for' only available with\" \"\" { target c++23_down } }\n> +    const int b = a;\n> +}\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=IzsEPkrV;\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=IzsEPkrV","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 4fqFPt2Hnxz1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 07 Apr 2026 02:38:26 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 7B35C4BA2E21\n\tfor <incoming@patchwork.ozlabs.org>; Mon,  6 Apr 2026 16:38:24 +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 126544BA2E21\n for <gcc-patches@gcc.gnu.org>; Mon,  6 Apr 2026 16:37:32 +0000 (GMT)","from mail-qk1-f198.google.com (mail-qk1-f198.google.com\n [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-263-n-tFpisbMgmyTxH_FH_HOA-1; Mon, 06 Apr 2026 12:37:30 -0400","by mail-qk1-f198.google.com with SMTP id\n af79cd13be357-8d3bb33c8b8so337000185a.0\n for <gcc-patches@gcc.gnu.org>; Mon, 06 Apr 2026 09:37:30 -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-8d2a806b2b2sm1107634385a.25.2026.04.06.09.37.27\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Mon, 06 Apr 2026 09:37:27 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 7B35C4BA2E21","OpenDKIM Filter v2.11.0 sourceware.org 126544BA2E21"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 126544BA2E21","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 126544BA2E21","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1775493452; cv=none;\n b=L/AwkILjkYxA/0ywfRjdXIIdXPYEXKOmwAtuEx4y0u8Xx3uvTtEXoogq3czrCRbMIphUghqrN+GgurLNUtJm6oVrkAsRU7Lalrw3UytYsWFmmzZG2kJZ+GignZIVDny2gG+NYjqe8LYNWL4jf35pc6J8k6iafICIRwMbNETvZco=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1775493452; c=relaxed/simple;\n bh=dNxdHp8CY76fUZB0dRWXvWlBfhtkVg2ak+bD9a+Qsyo=;\n h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From;\n b=kNQY3VMDJye0Gvt8jO5QBP0pFt9Bxsc7Gz1slY7HpVgxv6xO7IvIF89aCFWIXAh5rXU3CcwAeHMxxccwz4x96vUKtJFRoyv21d9NyDX//40cB2EIoLu3WQA4GFvwpbfeBT/SW/SAL6z2CPcazVHOcNLbsSbTHL9XZiA2usut+PQ=","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=1775493451;\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=Jnua1cfp5Yzt122SMR8dva1k9rrcSWGWifQo7HgOQ6M=;\n b=IzsEPkrVvSIcuFcA1vOy90dz5hGk9xHjOpHKjiezss4NpOIxgjeYE4JT9cf6zOAZGCyuml\n VaHbAqfc5QS1e9wZQNRg+lZofRp58qZkcvy2zuVR9gZtkoh5TUGmPphBmPafOklyDrEcEd\n hIImyosSU3tAY6PZybE+UIigJKOMi9E=","X-MC-Unique":"n-tFpisbMgmyTxH_FH_HOA-1","X-Mimecast-MFC-AGG-ID":"n-tFpisbMgmyTxH_FH_HOA_1775493450","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775493449; x=1776098249;\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=Jnua1cfp5Yzt122SMR8dva1k9rrcSWGWifQo7HgOQ6M=;\n b=oC298E8TN+UBENf+HGxvUPW9HYLK88BuIrf2CHuBkZT2I36PgV7x14vNODWmIVHBHm\n 2cMNa4mzPoLFrWYXkoQvKBgWtDfM4/8cMjMUgD956UW5+IVNvMrw+Xj44g1K6LGuIvxg\n Z3B8OEtmYKV9QKAhu9EYqdLsGgh7rndgIplw+85LOH7ETQXG8EdhGnldxu1f/JiS2dGC\n uHRfifzpJHRpSlg5Zz9nOn4pochcReNgG1Cp3iXLCpUCl0fq7Y0HCWNWfQltD6yHXHb/\n oFKkxVpsIO37y7bkE/K92vOj68A9o+U75L2aQkOWtSryzH2//5YzmrbvlBbbdNXvgV5I\n Ygmg==","X-Gm-Message-State":"AOJu0YxGFjLL0ujfFFaAZMMQ4sYn83/co12R9jGoZuiGJICYV3v9F0D0\n KB6tl5mFurmlS12MoPmMOD9mujd2rBZHg/X17XOClFEtjFe6yDUDOkhElqs+9e7SrXm4PBPrSGB\n uvu0fWMNW5Gsqtat8/nxwCGLwLskWN3ByW/B/u2+yRTqo10IN0Dmwq/n2Ej5Tx5szkkMZnA==","X-Gm-Gg":"AeBDiev3DI5H+prHPpuJn9+GbwfLcuEytGKoC2M7FFEKm66sREPlMoi07sZNG+IjdfC\n BLDcd9McSWJMyvVrMGuCpR47aRO1SRuwFaJjjxbGQaCrXrXkELq4iEkr9uZYLKkerIrlwUW1CQz\n wnOFUGnKdg56vbZUGfQjwTmigSrXjMAWydzA6WGoKwORNFhFfPhl0k51iMQB9WVpufgZG9kTDRT\n WNkHFSBZpHeNhSCVfbkrQwYZ2l1a8hbdqENkjPlu9zN3DImjhvIZoN2jluvXFY2Z2h7BFNHp6Ot\n 36VmdkQjvxW5Dvv3eVraX+BupJeGq+Y4rb8ET5wJ4nyCXQ7fKfr4mPYH9zXqVgb5nS7IHz1sJMh\n 7aNOvfNMA7RyfzFhbvZJWQUSZwhLXdcjDfIGjxlHFmvXVzy5aNGmWr8d8t4doLhO0eiIAeAaVwQ\n 4UIEB7RzaV/AEPVJWt5Xxkchgb/9CeLNQ=","X-Received":["by 2002:a05:620a:4442:b0:8b2:ea5a:4149 with SMTP id\n af79cd13be357-8d41ec08f6cmr1792529085a.65.1775493449084;\n Mon, 06 Apr 2026 09:37:29 -0700 (PDT)","by 2002:a05:620a:4442:b0:8b2:ea5a:4149 with SMTP id\n af79cd13be357-8d41ec08f6cmr1792525485a.65.1775493448612;\n Mon, 06 Apr 2026 09:37:28 -0700 (PDT)"],"Message-ID":"<7b51ad8c-ea46-457d-ad8b-9aa238a2e41e@redhat.com>","Date":"Mon, 6 Apr 2026 12:37:27 -0400","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] c++, v2: Fix up handling of for-range-decls of expansion\n stmt [PR124488]","To":"Jakub Jelinek <jakub@redhat.com>","Cc":"gcc-patches@gcc.gnu.org","References":"<ab2WW_On7Q3fJflw@tucnak>\n <fb51fd58-34c4-4858-9f03-c7ca06866e3b@redhat.com> <adNPtKeCGfTsY0wD@tucnak>","From":"Jason Merrill <jason@redhat.com>","In-Reply-To":"<adNPtKeCGfTsY0wD@tucnak>","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"mF9EfqDFd3N5FxB753SaMqGW1erJ2boRrNzEtTjnQi8_1775493450","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"}}]