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

--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-10 branch has been updated by Marek Polacek
<mpola...@gcc.gnu.org>:

https://gcc.gnu.org/g:18f103bd9e5465a10caeb70e2c7890a80c79d60a

commit r10-9692-g18f103bd9e5465a10caeb70e2c7890a80c79d60a
Author: Marek Polacek <pola...@redhat.com>
Date:   Fri Apr 9 20:03:45 2021 -0400

    c++: ICE with real-to-int conversion in template [PR97973]

    In this test we are building a call in a template, but since neither
    the function nor any of its arguments are dependent, we go down the
    normal path in finish_call_expr.  convert_arguments sees that we're
    binding a reference to int to double and therein convert_to_integer
    creates a FIX_TRUNC_EXPR.  Later, we call check_function_arguments
    which folds the arguments, and, in a template, fold_for_warn calls
    fold_non_dependent_expr.  But tsubst_copy_and_build should not see
    a FIX_TRUNC_EXPR (see the patch discussed in
    <https://gcc.gnu.org/pipermail/gcc-patches/2018-March/496183.html>)
    or we crash.

    So let's not create a FIX_TRUNC_EXPR in a template in the first place
    and instead use IMPLICIT_CONV_EXPR.

    gcc/cp/ChangeLog:

            PR c++/97973
            * call.c (conv_unsafe_in_template_p): New.
            (convert_like): Use it.

    gcc/testsuite/ChangeLog:

            PR c++/97973
            * g++.dg/conversion/real-to-int1.C: New test.

Reply via email to