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

--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Marek Polacek <[email protected]>:

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

commit r16-5432-ge2faea35a1edf6fca4d98800a1d9566db04a133b
Author: Marek Polacek <[email protected]>
Date:   Tue Nov 18 15:23:20 2025 -0500

    c++: fix ICE when comparing targs [PR119580]

    In r10-7816, cp_tree_equal/TEMPLATE_ID_EXPR was changed to use
    comp_template_args to compare the targs.  This makes sense, but
    comp_template_args won't deal with an error_mark_node.  We created
    a BASELINK for S::foo<T::value_type>, but since value_type couldn't
    be looked up, we ended up with an error_mark_node instead of a TREE_VEC
    of arguments for the TEMPLATE_ID_EXPR in the BASELINK.

    It seems reasonable not to create such a TEMPLATE_ID_EXPR by checking
    the result of tsubst_template_args like we do in so many other places.
    This changes the diagnostic in three tests, but it's only the followup
    error message after complaining about the type/value mismatch.

            PR c++/119580

    gcc/cp/ChangeLog:

            * pt.cc (tsubst_baselink): Return error_mark_node if
            tsubst_template_args returned error_mark_node.

    gcc/testsuite/ChangeLog:

            * g++.dg/template/crash106.C: Adjust expected diagnostics.
            * g++.dg/template/crash112.C: Likewise.
            * g++.dg/template/dependent-args1.C: Likewise.
            * g++.dg/cpp0x/pr119580.C: New test.

    Reviewed-by: Jason Merrill <[email protected]>

Reply via email to