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

--- Comment #7 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:e5613c55c2900cd23c9e78592f10258e19c74ab3

commit r10-8120-ge5613c55c2900cd23c9e78592f10258e19c74ab3
Author: Marek Polacek <pola...@redhat.com>
Date:   Thu May 7 14:34:15 2020 -0400

    c++: ICE in value_dependent_expression_p in C++98 mode [PR94938]

    Here we ICE with -std=c++98 since the newly added call to
uses_template_parms
    (r10-6357): we hit
    26530             gcc_assert (cxx_dialect >= cxx11
    26531                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
    and TYPE is a record type.  The problem is that the argument to
    value_dependent_expression_p does not satisfy potential_constant_expression
    which it must, as the comment explains.  I thought about fixing this in
    uses_template_parms -- only call v_d_e_p if p_c_e is true, but in this
    case we want to also suppress the warnings if we don't have a constant
    expression.  I couldn't simply check TREE_CONSTANT as in
    compute_array_index_type_loc, because then we'd stop warning in the new
    Wtype-limits3.C test.

    Fixed by using type_dependent_expression_p_push instead.  This means
    that we won't suppress the warnings for value-dependent expressions that
    aren't type-dependent, e.g. sizeof (T).  This only seems to make a
    difference for -Wdiv-by-zero, now tested in Wdiv-by-zero-3.C, where I
    think it's reasonable to warn.  It could make -Wtautological-compare
    warn more, but that warning doesn't trigger when it gets constant
arguments.
    Wtype-limits4.C is a test reduced from poly-int.h and it tests a scenario
    that was missing in our testsuite.

    This patch also moves the warning_sentinels after the RECURs -- we mean
    to use them for build_x_binary_op purposes only.

            PR c++/94938
            * pt.c (tsubst_copy_and_build): Call
type_dependent_expression_p_push
            instead of uses_template_parms.  Move the warning_sentinels after
the
            RECURs.

            * g++.dg/warn/Wdiv-by-zero-3.C: New test.
            * g++.dg/warn/Wtype-limits4.C: New test.
            * g++.dg/warn/template-2.C: New test.
            * g++.old-deja/g++.pt/crash10.C: Add dg-warning.

Reply via email to