varpool: Restore GENERIC TREE_READONLY automatic var optimization [PR7260]
authorJakub Jelinek <jakub@redhat.com>
Wed, 27 Jan 2021 09:08:46 +0000 (10:08 +0100)
committerJakub Jelinek <jakub@redhat.com>
Wed, 27 Jan 2021 09:08:46 +0000 (10:08 +0100)
commitefc9ccbfd0ca4da6bf0aba913df6f77f56044dc2
treec146b34a47d8ca6cb39ee98c939acb426514a8cd
parente62bb7f083470ccdadbd83ef885c6fe1e5cb9e67
varpool: Restore GENERIC TREE_READONLY automatic var optimization [PR7260]

In 4.8 and earlier we used to fold the following to 0 during GENERIC folding,
but we don't do that anymore because ctor_for_folding etc. has been turned into a
GIMPLE centric API, but as the testcase shows, it is invoked even during
GENERIC folding and there the automatic vars still should have meaningful
initializers.  I've verified that the C++ FE drops TREE_READONLY on
automatic vars with const qualified types if they require non-constant
(runtime) initialization.

2021-01-27  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/97260
* varpool.c: Include tree-pass.h.
(ctor_for_folding): In GENERIC return DECL_INITIAL for TREE_READONLY
non-TREE_SIDE_EFFECTS automatic variables.

* gcc.dg/tree-ssa/pr97260.c: New test.
gcc/testsuite/gcc.dg/tree-ssa/pr97260.c [new file with mode: 0644]
gcc/varpool.c