https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116960
--- Comment #5 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:c7eec82942496520d6b0604aa945a89f279e2562 commit r15-9068-gc7eec82942496520d6b0604aa945a89f279e2562 Author: Marek Polacek <pola...@redhat.com> Date: Thu Mar 27 15:03:18 2025 -0400 c++: fix reporting routines re-entered [PR119303] We crash while we call warning_at ("inline function used but never defined") since it invokes dump_template_bindings -> tsubst -> ... -> convert_like -> ... -> c_common_truthvalue_conversion -> warning_at ("enum constant in boolean context") cp_truthvalue_conversion correctly gets complain=0 but it calls c_common_truthvalue_conversion from c-family which doesn't have a similar parameter. We can fix this by tweaking diagnostic_context::report_diagnostic to check for recursion after checking if the diagnostic was enabled. PR c++/116960 PR c++/119303 gcc/ChangeLog: * diagnostic.cc (diagnostic_context::report_diagnostic): Check for non-zero m_lock later, after checking diagnostic_enabled. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/lambda-uneval26.C: New test. * g++.dg/warn/undefined2.C: New test. Reviewed-by: Jason Merrill <ja...@redhat.com>