gimplify: Don't optimize register const vars to static [PR93949]
authorJakub Jelinek <jakub@redhat.com>
Thu, 27 Feb 2020 09:45:30 +0000 (10:45 +0100)
committerJakub Jelinek <jakub@redhat.com>
Thu, 27 Feb 2020 09:45:30 +0000 (10:45 +0100)
commit1956773cc655dfcba8d310066d3f6585dd4b8972
tree97912090e49accaad698355da78281533048d1a0
parent5f9cd512c4278621435cce486dd00248ea2e821c
gimplify: Don't optimize register const vars to static [PR93949]

The following testcase is rejected, while it was accepted in 3.4 and earlier
(before tree-ssa merge).
The problem is that we decide to promote the const variable to TREE_STATIC,
but TREE_STATIC DECL_REGISTER VAR_DECLs may only be the global register vars
and so assemble_variable/make_decl_rtl diagnoses it.

Either we do what the following patch does, where we could consider
register as a hint the user doesn't want such optimization, because if
something is forced static, it is not "register" anymore and register static
is not valid in C either, or we could clear DECL_REGISTER instead, but would
still need to punt at least on DECL_HARD_REGISTER cases.

2020-02-27  Jakub Jelinek  <jakub@redhat.com>

PR c/93949
* gimplify.c (gimplify_init_constructor): Don't promote readonly
DECL_REGISTER variables to TREE_STATIC.

* gcc.c-torture/compile/pr93949.c: New test.
gcc/ChangeLog
gcc/gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr93949.c [new file with mode: 0644]