On Thu, 27 Feb 2020, Jakub Jelinek wrote:

> Hi!
> 
> 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.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

OK.

Thanks,
Richard.

> 2020-02-27  Jakub Jelinek  <ja...@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/gimplify.c.jj 2020-02-25 13:54:02.087091120 +0100
> +++ gcc/gimplify.c    2020-02-26 19:30:57.466490166 +0100
> @@ -4923,6 +4923,7 @@ gimplify_init_constructor (tree *expr_p,
>           && num_nonzero_elements > 1
>           && TREE_READONLY (object)
>           && VAR_P (object)
> +         && !DECL_REGISTER (object)
>           && (flag_merge_constants >= 2 || !TREE_ADDRESSABLE (object))
>           /* For ctors that have many repeated nonzero elements
>              represented through RANGE_EXPRs, prefer initializing
> --- gcc/testsuite/gcc.c-torture/compile/pr93949.c.jj  2020-02-26 
> 19:42:15.754530691 +0100
> +++ gcc/testsuite/gcc.c-torture/compile/pr93949.c     2020-02-26 
> 19:42:08.153642329 +0100
> @@ -0,0 +1,7 @@
> +/* PR c/93949 */
> +
> +void
> +foo (void)
> +{
> +  register const double d[3] = { 0., 1., 2. };
> +}
> 
>       Jakub
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)

Reply via email to