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

--- Comment #10 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <ppa...@gcc.gnu.org>:

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

commit r15-9350-gf3862ab07943d1fc6e6a0416657ae4b7d1f3941d
Author: Patrick Palka <ppa...@redhat.com>
Date:   Wed Apr 9 17:47:34 2025 -0400

    c++: ICE with nested default targ lambdas [PR119574]

    Here we substitute into the inner lambda twice, first during default
    argument substitution for the outer template parameters, then during
    that for the inner template parameters.

    For the second testcase (which is easier to follow/debug), the first
    substitution into the inner lambda is with the template arguments
    {0, NULL_TREE}, which we defer because it's an incremental substitution.
    For the second and final substitution we have the template arguments
    {1, NULL_TREE}, which we try combining via add_extra_args and ICE on
    the checking assert because TREE_STATIC isn't set on the deferred
    arguments but the template arguments are considered dependent.

    The template arguments aren't dependent however -- they're just
    incomplete because when we deferred them we were in the middle of
    deduction, and we consider a NULL_TREE template argument as dependent.

    If we remove this checking assert, we go on to correctly merge the
    template arguments into {{0, NULL_TREE}, {1, NULL_TREE}}.  So this
    patch just removes this imprecise assert.

            PR c++/119574

    gcc/cp/ChangeLog:

            * pt.cc (add_extra_args): Remove checking assert.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp2a/lambda-targ13.C: New test.
            * g++.dg/cpp2a/lambda-targ13a.C: New test.
            * g++.dg/cpp2a/lambda-targ13b.C: New test.

    Reviewed-by: Jason Merrill <ja...@redhat.com>

Reply via email to