]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: Fix up name independent decl in structured binding handling in range for [PR115586]
authorJakub Jelinek <jakub@redhat.com>
Fri, 7 Feb 2025 16:08:39 +0000 (17:08 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 7 Feb 2025 16:08:39 +0000 (17:08 +0100)
commitca7c6d1212b8589deed18386427c67851af2b9ad
tree46191832c830e7cb45e163147fd1fb0a7bc1a33e
parent35d40b56eb6e7ac63c790a799d3b367742d58a5e
c++: Fix up name independent decl in structured binding handling in range for [PR115586]

cp_parser_range_for temporarily reverts IDENTIFIER_BINDING changes
to hide the decls from the structured bindings from lookup during
parsing of the expression after :
If there are 2 or more name independent decls, we undo IDENTIFIER_BINDING
for the same name multiple times, even when just one has been added
(with a TREE_LIST inside of it as decl).

The following patch fixes it by handling the _ name at most once, the
later loop will DTRT then and just reinstall the temporarily hidden
binding with the TREE_LIST in there.

2025-02-07  Jakub Jelinek  <jakub@redhat.com>

PR c++/115586
* parser.cc (cp_parser_range_for): For name independent decls in
structured bindings, only push the name/binding once per
structured binding.

* g++.dg/cpp26/name-independent-decl9.C: New test.
* g++.dg/cpp26/name-independent-decl10.C: New test.
gcc/cp/parser.cc
gcc/testsuite/g++.dg/cpp26/name-independent-decl10.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp26/name-independent-decl9.C [new file with mode: 0644]