aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2006-08-04 19:03:32 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2006-08-04 17:03:32 +0000
commit9659ce8b6160434d90f8b7985921f0b05e74d2d7 (patch)
treed0caa9a1ab904708ee4a7426cf34ec43d34b434f /gcc
parent824a4527c15e4ae4664a56366030bc4f6e8243b0 (diff)
downloadgcc-9659ce8b6160434d90f8b7985921f0b05e74d2d7.zip
gcc-9659ce8b6160434d90f8b7985921f0b05e74d2d7.tar.gz
gcc-9659ce8b6160434d90f8b7985921f0b05e74d2d7.tar.bz2
re PR tree-optimization/24888 (duplication of local variables after versioning/inlining)
PR tree-optimization/24888 * tree-inline.c (expand_call_inline): Do not re-record variables. (declare_inline_vars): Add variable to unexpanded_var_list. From-SVN: r115927
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-inline.c10
2 files changed, 13 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index af93012..642cde8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-08-04 Jan Hubicka <jh@suse.cz>
+
+ PR tree-optimization/24888
+ * tree-inline.c (expand_call_inline): Do not re-record variables.
+ (declare_inline_vars): Add variable to unexpanded_var_list.
+
2006-08-04 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
Roger Sayle <roger@eyesopen.com>
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 92d85a8..b05bf26 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -2163,8 +2163,6 @@ expand_call_inline (basic_block bb, tree stmt, tree *tp, void *data)
/* Update callgraph if needed. */
cgraph_remove_node (cg_edge->callee);
- /* Declare the 'auto' variables added with this inlined body. */
- record_vars (BLOCK_VARS (id->block));
id->block = NULL_TREE;
successfully_inlined = TRUE;
@@ -2556,7 +2554,13 @@ declare_inline_vars (tree block, tree vars)
{
tree t;
for (t = vars; t; t = TREE_CHAIN (t))
- DECL_SEEN_IN_BIND_EXPR_P (t) = 1;
+ {
+ DECL_SEEN_IN_BIND_EXPR_P (t) = 1;
+ gcc_assert (!TREE_STATIC (t) && !TREE_ASM_WRITTEN (t));
+ cfun->unexpanded_var_list =
+ tree_cons (NULL_TREE, t,
+ cfun->unexpanded_var_list);
+ }
if (block)
BLOCK_VARS (block) = chainon (BLOCK_VARS (block), vars);