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

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

https://gcc.gnu.org/g:40465293cd780aa82dcae75dfcfb1449d8c0561e

commit r11-7709-g40465293cd780aa82dcae75dfcfb1449d8c0561e
Author: Marek Polacek <pola...@redhat.com>
Date:   Wed Mar 3 18:37:49 2021 -0500

    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