https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121575

--- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:cc85998ba7984e43c1d89d47dfbfc219c142fddf

commit r16-3429-gcc85998ba7984e43c1d89d47dfbfc219c142fddf
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Thu Aug 28 10:46:51 2025 +0200

    c++: Fix ICE with parameter uses in expansion stmts [PR121575]

    The following testcase shows an ICE when a parameter of a non-template
    function is referenced in expansion stmt body.

    tsubst_expr in that case assumes that either the PARM_DECL has registered
    local specialization, or is this argument or it is in unevaluated context.
    Parameters are always defined outside of the expansion statement
    for-range-declaration or body, so for the instantiation of the body
    outside of templates should always map to themselves.
    It could be fixed by registering local self-specializations for all the
    function parameters, but just handling it in tsubst_expr seems to be easier
    and less costly.
    Some PARM_DECLs, e.g. from concepts, have NULL DECL_CONTEXT, those are
    handled like before (and assert it is unevaluated operand), for others
    this checks if the PARM_DECL is from a non-template and in that case it
    will just return t.

    2025-08-28  Jakub Jelinek  <ja...@redhat.com>
                Jason Merrill  <ja...@redhat.com>

            PR c++/121575
            * pt.cc (tsubst_expr) <case PARM_DECL>: If DECL_CONTEXT (t) isn't a
            template return t for PARM_DECLs without local specialization.

            * g++.dg/cpp26/expansion-stmt20.C: New test.

Reply via email to