[Bug c++/123825] std::meta::has_identifier issue
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Jan 31 09:22:39 GMT 2026
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123825
--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <jakub@gcc.gnu.org>:
https://gcc.gnu.org/g:d6386e0984556173339c06b2b7cfe2dd55eeb07b
commit r16-7212-gd6386e0984556173339c06b2b7cfe2dd55eeb07b
Author: Jakub Jelinek <jakub@redhat.com>
Date: Sat Jan 31 10:19:26 2026 +0100
c++: Handle argument merging push_local_extern_decl_alias [PR123825]
The first testcase comes directly from
https://eel.is/c++draft/meta.reflection#names-1.8.2
and shows that we don't handle for -freflection the function
argument name difference handling isn't performed for local externs,
which doesn't go the duplicate_decls route but directly remembers
the alias.
The following patch handles outlines the DECL_ARGUMENTS handling
from duplicate_decls and uses it in push_local_extern_decl_alias
(with some minor differences and for now not propagating attributes
back for the push_local_extern_decl_alias case unless -freflection).
ALso, I found that the addition of a new alias created completely broken
DECL_ARGUMENTS (copied at most the first PARM_DECL, never more than that).
That is because copy_decl clears DECL_CHAIN, so the loop always stopped
after the first iteration.
2026-01-31 Jakub Jelinek <jakub@redhat.com>
PR c++/123825
* cp-tree.h (merge_decl_arguments): Declare.
* decl.cc (duplicate_decls): Outline DECL_ARGUMENTS handling
into ...
(merge_decl_arguments): ... new function.
* name-lookup.cc (push_local_extern_decl_alias): Call
merge_decl_arguments. Don't copy just the first PARM_DECL when
creating a new alias FUNCTION_DECL.
* g++.dg/reflect/has_identifier3.C: New test.
* g++.dg/reflect/identifier_of3.C: New test.
* g++.dg/cpp26/attr-indeterminate5.C: New test.
More information about the Gcc-bugs
mailing list