]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++/reflection: wrong error with const meta::info parm [PR123614]
authorMarek Polacek <polacek@redhat.com>
Sun, 1 Feb 2026 20:20:55 +0000 (15:20 -0500)
committerMarek Polacek <polacek@redhat.com>
Mon, 2 Feb 2026 14:28:13 +0000 (09:28 -0500)
commit9de2f8da0c37f04d67bc3d5dcee6a36034df2f9a
tree74c767bef1f59d4fde731de8e0fc4c55f8d7c85a
parent075aadae398431b23d34dfc7204e297b8676dd59
c++/reflection: wrong error with const meta::info parm [PR123614]

Here we issue a bogus "not a constant expression" error ultimately
because get_info returns NULL_TREE for the const parameter in Name.
The cxx_eval_constant_expression in get_info produces a NOP_EXPR:

  (info) reflect_expr <int>

which is not REFLECT_EXPR_P.  This isn't caught by the
REFLECTION_TYPE_P && REFLECT_EXPR_P check in _eval_constant_expression
because OP is a NOP_EXPR.  The NOP_EXPR comes from adjust_temp_type.

I suppose I could just add STRIP_NOPS to get_info.  Or I could follow
c++/65695 / r6-41-gfb899e32c16088 and adjust cp_fold_convert to fold
away the conversion.

PR c++/123614

gcc/cp/ChangeLog:

* cvt.cc (cp_fold_convert): Avoid wrapping a REFLECT_EXPR in NOP_EXPR.

gcc/testsuite/ChangeLog:

* g++.dg/reflect/parm5.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
gcc/cp/cvt.cc
gcc/testsuite/g++.dg/reflect/parm5.C [new file with mode: 0644]