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>