aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-inline.c11
2 files changed, 12 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b7b6b00..5da41db 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2010-07-04 Richard Guenther <rguenther@suse.de>
+ PR middle-end/44785
+ * tree-inline.c (initialize_inlined_parameters): Do not
+ re-use pointer-map slot over remap_type call.
+
+2010-07-04 Richard Guenther <rguenther@suse.de>
+
* tree-ssa-sccvn.c (vn_reference_lookup_3): Fix last commit.
2010-07-04 Richard Guenther <rguenther@suse.de>
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 3b1c459..46c604f 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -2690,19 +2690,20 @@ initialize_inlined_parameters (copy_body_data *id, gimple stmt,
if (varp
&& TREE_CODE (*varp) == VAR_DECL)
{
- tree def = (gimple_in_ssa_p (cfun)
+ tree def = (gimple_in_ssa_p (cfun) && is_gimple_reg (p)
? gimple_default_def (id->src_cfun, p) : NULL);
- TREE_TYPE (*varp) = remap_type (TREE_TYPE (*varp), id);
+ tree var = *varp;
+ TREE_TYPE (var) = remap_type (TREE_TYPE (var), id);
/* Also remap the default definition if it was remapped
to the default definition of the parameter replacement
by the parameter setup. */
- if (def && gimple_in_ssa_p (cfun) && is_gimple_reg (p))
+ if (def)
{
tree *defp = (tree *) pointer_map_contains (id->decl_map, def);
if (defp
&& TREE_CODE (*defp) == SSA_NAME
- && SSA_NAME_VAR (*defp) == *varp)
- TREE_TYPE (*defp) = TREE_TYPE (*varp);
+ && SSA_NAME_VAR (*defp) == var)
+ TREE_TYPE (*defp) = TREE_TYPE (var);
}
}
}