tree-inline: Fix VLA handling [PR95552]
authorJason Merrill <jason@redhat.com>
Fri, 5 Jun 2020 20:36:27 +0000 (16:36 -0400)
committerJason Merrill <jason@redhat.com>
Tue, 9 Jun 2020 19:31:51 +0000 (15:31 -0400)
commit77103685ff4b50b3c4d7ee76688bdf452acc82c7
tree02414b1b8578c53c9922428d49a46a975acaa020
parentab2789ec507a94f1a75a6534bca51c7b39037ce0
tree-inline: Fix VLA handling [PR95552]

The problem in this testcase comes from cloning the constructor into
complete and base variants.  When we clone the body the first time,
walk_tree_1 calls copy_tree_body_r on the type of the artificial TYPE_DECL
we made for the VLA type without calling it on the decl itself, so we
overwrite the type of the TYPE_DECL without copying the decl first.

This has been broken since we started inserting a TYPE_DECL for anonymous
VLAs in r7-457.

This patch fixes walk_tree_1 to call the function on the TYPE_DECL, as we do
for other decls of a DECL_EXPR.

gcc/ChangeLog:

PR c++/95552
* tree.c (walk_tree_1): Call func on the TYPE_DECL of a DECL_EXPR.

gcc/testsuite/ChangeLog:

PR c++/95552
* g++.dg/ext/vla23.C: New test.
gcc/testsuite/g++.dg/ext/vla23.C [new file with mode: 0644]
gcc/tree.c