From f14c43566a1fc02c036396baec3c04f27817899f Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Thu, 17 Nov 2011 16:03:56 +0000 Subject: [PATCH] re PR tree-optimization/50644 (ICE in set_is_used added today) PR middle-end/50644 PR middle-end/50741 * tree-ssa-live.c (mark_all_vars_used_1): Recurse only for decls of current function. (remove_unused_locals): Ditto. testsuite/ * g++.dg/tree-ssa/pr50741.C: New. From-SVN: r181443 --- gcc/ChangeLog | 8 ++++++++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/tree-ssa/pr50741.C | 14 ++++++++++++++ gcc/tree-ssa-live.c | 6 ++++-- 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/tree-ssa/pr50741.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1d73414..b0ed872 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2011-11-17 Michael Matz + + PR middle-end/50644 + PR middle-end/50741 + * tree-ssa-live.c (mark_all_vars_used_1): Recurse only for decls of + current function. + (remove_unused_locals): Ditto. + 2011-11-16 Richard Henderson * config/alpha/alpha.c (alpha_split_compare_and_swap_12): Copy diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 00b9a19..f345882 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-11-17 Michael Matz + + PR middle-end/50644 + PR middle-end/50741 + * g++.dg/tree-ssa/pr50741.C: New. + 2011-11-17 Rainer Orth * lib/gcc-simulate-thread.exp (simulate-thread): Skip on diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr50741.C b/gcc/testsuite/g++.dg/tree-ssa/pr50741.C new file mode 100644 index 0000000..843a7be --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr50741.C @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -g" } */ +/* PR middle-end/50741 */ + +struct PublishLo +{ + const char *functionName; + ~PublishLo(); +}; +struct A { A(); }; +A::A() +{ + static PublishLo _rL_53 = {__FUNCTION__}; +} diff --git a/gcc/tree-ssa-live.c b/gcc/tree-ssa-live.c index 2a2c133..b8a056e 100644 --- a/gcc/tree-ssa-live.c +++ b/gcc/tree-ssa-live.c @@ -374,7 +374,8 @@ mark_all_vars_used_1 (tree *tp, int *walk_subtrees, void *data) eliminated as unused. */ if (TREE_CODE (t) == VAR_DECL) { - if (data != NULL && bitmap_clear_bit ((bitmap) data, DECL_UID (t))) + if (data != NULL && bitmap_clear_bit ((bitmap) data, DECL_UID (t)) + && DECL_CONTEXT (t) == current_function_decl) mark_all_vars_used (&DECL_INITIAL (t), data); set_is_used (t); } @@ -836,7 +837,8 @@ remove_unused_locals (void) if (TREE_CODE (var) == VAR_DECL && is_global_var (var) && var_ann (var) != NULL - && is_used_p (var)) + && is_used_p (var) + && DECL_CONTEXT (var) == current_function_decl) mark_all_vars_used (&DECL_INITIAL (var), global_unused_vars); num = VEC_length (tree, cfun->local_decls); -- 2.7.4