[Bug c++/119303] [12/13/14/15 Regression] ICE: error reporting routines re-entered. in warning_at (diagnostic-global-context.cc:185)
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Mar 31 14:35:38 GMT 2025
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119303
--- Comment #5 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Marek Polacek <mpolacek@gcc.gnu.org>:
https://gcc.gnu.org/g:c7eec82942496520d6b0604aa945a89f279e2562
commit r15-9068-gc7eec82942496520d6b0604aa945a89f279e2562
Author: Marek Polacek <polacek@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 <jason@redhat.com>
More information about the Gcc-bugs
mailing list