This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFA: Fix debug/44832


On Sat, Jul 10, 2010 at 6:43 AM, Joern Rennecke <amylaar@spamcop.net> wrote:
> Bootstrapped & regression tested on i686-pc-linux-gnu on top of the patch
> for PR other/44874 in trunk revision 161952; as expected, the pr44832 test
> is fixed for gcc and g++; there are no new regressions.
>
> It also fixes the -fcompare-debug failures on i686-pc-linux-gnu for the
> various hand-run test cases we have for this PR.
>
> 2010-07-10 ?Richard Guenther ?<rguenther@suse.de>
> ? ? ? ? ? ?Joern Rennecke ?<joern.rennecke@embecosm.com>
>
> ? ? ? ?PR debug/44832
> ? ? ? ?* tree-ssa-live.c (mark_all_vars_used_1): Set TREE_USED for
> ? ? ? ?LABEL_DECL.
> ? ? ? ?(remove_unused_scope_block_p): Don't drop TREE_USED LABEL_DECLs
> ? ? ? ?unless they have DECL_IGNORED_P set.
>
> diff -pu ../../../pr44874/gcc/gcc/tree-ssa-live.c ./tree-ssa-live.c
> --- ../../../pr44874/gcc/gcc/tree-ssa-live.c ? ?2010-07-09
> 19:46:22.862606781 +0100
> +++ ./tree-ssa-live.c ? 2010-07-09 19:49:13.544981717 +0100
> @@ -384,6 +384,19 @@ mark_all_vars_used_1 (tree *tp, int *wal
> ? ? ? ?}
> ? ? ? set_is_used (t);
> ? ? }
> + ?/* 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.
> ?*/
> + ?if (TREE_CODE (t) == LABEL_DECL)
> +#if 0
> + ? ?/* A label that has not been artifically created by the compiler should
> + ? ? ? only be used in the IL if it has been explicitly used by the
> + ? ? ? programmer. ?*/
> + ? ?gcc_assert (TREE_USED (t) || DECL_IGNORED_P (t));
> +#else
> + ? ?/* Actually, init_vars_expansion clears TREE_USED for LABEL_DECLs too,
> + ? ? ? so we must compute it here. ?*/
> + ? ?TREE_USED (t) = 1;
> +#endif

No #if 0 code please, just remove it.

Ok with that change.

Thanks,
Richard.

> ? if (IS_TYPE_OR_DECL_P (t))
> ? ? *walk_subtrees = 0;
> @@ -463,6 +476,19 @@ remove_unused_scope_block_p (tree scope)
> ? ? ? else if ((ann = var_ann (*t)) != NULL
> ? ? ? ? ? ? ? ?&& ann->used)
> ? ? ? ?unused = false;
> + ? ? ?else if (TREE_CODE (*t) == LABEL_DECL && TREE_USED (*t))
> + ? ? ? /* For labels that are still used in the IL, the decision to
> + ? ? ? ? ?preserve them must not depend DEBUG_INFO_LEVEL, otherwise we
> + ? ? ? ? ?risk having different ordering in debug vs. ?non-debug builds
> + ? ? ? ? ?during inlining or versioning.
> + ? ? ? ? ?A label appearing here (we have already checked DECL_IGNORED_P)
> + ? ? ? ? ?should not be used in the IL unless it has been explicitly used
> + ? ? ? ? ?before, so we use TREE_USED as an approximation. ?*/
> + ? ? ? /* In principle, we should do the same here as for the debug case
> + ? ? ? ? ?below, however, when debugging, there might be additional nested
> + ? ? ? ? ?levels that keep an upper level with a label live, so we have to
> + ? ? ? ? ?force this block to be considered used, too. ?*/
> + ? ? ? unused = false;
>
> ? ? ? /* When we are not doing full debug info, we however can keep around
> ? ? ? ? only the used variables for cfgexpand's memory packing saving quite
>
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]