[Bug c++/125498] [reflection] ICE with -g -freflection on constructor-parameter reflection NTTP
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Jun 10 14:14:28 GMT 2026
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125498
--- Comment #4 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:64627d4f8349af24f5a84c0936eb00256769b534
commit r17-1464-g64627d4f8349af24f5a84c0936eb00256769b534
Author: Marek Polacek <polacek@redhat.com>
Date: Tue Jun 9 16:50:14 2026 -0400
c++/reflection: ICE with -g on reflection of ctor param [PR125498]
Here we ICE because S::S(int) lost its DECL_ARGUMENTS, and so the
skip_artificial_parms_for in FUNCTION_FIRST_USER_PARM in write_reflection
crashes on a null tree. We've thrown away the body of S::S(int) in
cgraph_node::release_body along with its DECL_ARGUMENTS:
if (!keep_arguments)
DECL_ARGUMENTS (decl) = NULL;
This happens in finalize_compilation_unit -> analyze_functions because
there are no cgraph_node::callers (so referred_to_p() is false I think),
and .force_output is false.
We then call mangle_decl from finalize_compilation_unit ->
dwarf2out_early_finish.
Instead of FUNCTION_FIRST_USER_PARM we can use DECL_PARM_INDEX, thus
avoiding the need to either keep the body around or at least set
keep_arguments.
PR c++/125498
gcc/cp/ChangeLog:
* mangle.cc (write_reflection): Use DECL_PARM_INDEX for
computing the parameter index.
gcc/testsuite/ChangeLog:
* g++.dg/reflect/mangle7.C: New test.
* g++.dg/reflect/parameters_of9.C: New test.
Reviewed-by: Patrick Palka <ppalka@redhat.com>
More information about the Gcc-bugs
mailing list