[Bug c++/100344] [12 Regression] compiler ICE internal compiler error: in build_call_a, at cp/call.c:38

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon May 3 17:36:32 GMT 2021


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

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

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

commit r12-391-geef4fa6968ae0682679c27dae06409db3d113d5d
Author: Patrick Palka <ppalka@redhat.com>
Date:   Mon May 3 13:35:26 2021 -0400

    c++: mark_used and ADL with template-id [PR100344]

    My r11-295 patch for PR68942 didn't consider that the callee of an
    ADL-eligible function call can be a TEMPLATE_ID_EXPR, and we don't want
    to disable mark_used when substituting into the template arguments of
    this TEMPLATE_ID_EXPR because the arguments are clearly used regardless
    of the outcome of ADL.  In the first testcase below, this oversight
    causes us to trip over the assert in build_call_a for the call to
    find_index<int> because the function no longer had its TREE_USED bit set
    from mark_used.

    So this patch restricts the original fix to disable mark_used only when
    the callee is a FUNCTION_DECL, which seems to be the only case that
    matters for PR68942.  For instance, in the second testcase below we
    already don't mark_used the deleted function specialization even before
    r11-295.

    gcc/cp/ChangeLog:

            PR c++/68942
            PR c++/100344
            * pt.c (tsubst_copy_and_build) <case CALL_EXPR>: Set tf_conv
            only when the callee is a FUNCTION_DECL.

    gcc/testsuite/ChangeLog:

            PR c++/68942
            PR c++/100344
            * g++.dg/template/call8.C: New test.
            * g++.dg/template/koenig12a.C: New test.


More information about the Gcc-bugs mailing list