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

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

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

commit r15-6089-gd26c166001d6a5bdfd94be6e6d17135669ed340b
Author: Marek Polacek <pola...@redhat.com>
Date:   Mon Dec 9 15:36:25 2024 -0500

    c++: ICE with -Wduplicated-branches in template [PR117880]

    In a template, for things like void() we'll create a CAST_EXPR with
    a null operand.  That causes a crash with -Wduplicated-branches on:

      false ? void() : void();

    because we do

      if (warn_duplicated_branches
          && (complain & tf_warning)
          && (arg2 == arg3 || operand_equal_p (arg2, arg3,
                                               OEP_ADDRESS_OF_SAME_FIELD)))

    even in a template.  So one way to fix the ICE would be to check
    !processing_template_decl.  But we can also do the following and
    continue warning even in templates.

    This ICE appeared with the removal of NON_DEPENDENT_EXPR; before,
    operand_equal_p would bail on this code so there was no problem.

            PR c++/117880

    gcc/ChangeLog:

            * fold-const.cc (operand_compare::operand_equal_p) <case
tcc_unary>:
            Use OP_SAME_WITH_NULL instead of OP_SAME.

    gcc/testsuite/ChangeLog:

            * g++.dg/warn/Wduplicated-branches8.C: New test.

    Reviewed-by: Jason Merrill <ja...@redhat.com>

Reply via email to