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

--- Comment #3 from CVS 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:effcb4181e143bc390286a489ff849768a49f6af

commit r10-7757-geffcb4181e143bc390286a489ff849768a49f6af
Author: Patrick Palka <ppa...@redhat.com>
Date:   Wed Apr 15 12:47:41 2020 -0400

    c++: Error recovery with erroneous DECL_INITIAL [PR94475]

    Here we're ICE'ing in do_narrow during error-recovery, because ocp_convert
    returns error_mark_node after it attempts to reduce a const decl to its
    erroneous DECL_INITIAL via scalar_constant_value, and we later pass this
    error_mark_node to fold_build2 which isn't prepared to handle
error_mark_nodes.

    We could fix this ICE in do_narrow by checking if ocp_convert returns
    error_mark_node, but for the sake of consistency and for better error
recovery
    it seems it'd be preferable if ocp_convert didn't care that a const decl's
    initializer is erroneous and would instead proceed as if the decl was not
const,
    which is the approach that this patch takes.

    gcc/cp/ChangeLog:

            PR c++/94475
            * cvt.c (ocp_convert): If the result of scalar_constant_value is
            erroneous, ignore it and use the original expression.

    gcc/testsuite/ChangeLog:

            PR c++/94475
            * g++.dg/conversion/err-recover2.C: New test.
            * g++.dg/diagnostic/pr84138.C: Remove now-bogus warning.
            * g++.dg/warn/Wsign-compare-8.C: Remove now-bogus warning.

Reply via email to