https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118790

--- Comment #25 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #24)
> So
> --- gcc/tree-ssa-live.cc.jj   2025-01-02 11:23:05.915664859 +0100
> +++ gcc/tree-ssa-live.cc      2025-02-11 14:44:33.940178150 +0100
> @@ -369,9 +369,17 @@ mark_all_vars_used_1 (tree *tp, int *wal
>      {
>        /* When a global var becomes used for the first time also walk its
>           initializer (non global ones don't have any).  */
> -      if (set_is_used (t) && is_global_var (t)
> -       && DECL_CONTEXT (t) == current_function_decl)
> -     mark_all_vars_used (&DECL_INITIAL (t));
> +      if (set_is_used (t))
> +     {
> +       if (is_global_var (t)
> +           && DECL_CONTEXT (t) == current_function_decl)
> +         mark_all_vars_used (&DECL_INITIAL (t));
> +       if (DECL_HAS_VALUE_EXPR_P (t))
> +         {
> +           tree dve = DECL_VALUE_EXPR (t);
> +           mark_all_vars_used (&dve);
> +         }
> +     }
>      }
>    /* remove_unused_scope_block_p requires information about labels
>       which are not DECL_IGNORED_P to tell if they might be used in the IL. 
> */
> ?  Except this doesn't work, that new code isn't encountered on the
> testcase, so it must be something else that removes the vars.

Yes, sth like the above should work.  It might be also inlining not
copying over the vars - IIRC it also has some tricks, at least for
those in local_decls.

Reply via email to