aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-alias.c
diff options
context:
space:
mode:
authorDaniel Berlin <dberlin@dberlin.org>2005-07-19 03:36:15 +0000
committerDaniel Berlin <dberlin@gcc.gnu.org>2005-07-19 03:36:15 +0000
commitb9d3348810a657d5b64e23cb6f098bd7d479191b (patch)
tree880e6bcccb700c5d4ffc320ff94104a03e895fc9 /gcc/tree-ssa-alias.c
parent9fa264571da0247ed1b0d0d0e64897f7b3731c50 (diff)
downloadgcc-b9d3348810a657d5b64e23cb6f098bd7d479191b.zip
gcc-b9d3348810a657d5b64e23cb6f098bd7d479191b.tar.gz
gcc-b9d3348810a657d5b64e23cb6f098bd7d479191b.tar.bz2
re PR tree-optimization/22483 (ICE : tree check: expected ssa_name, have var_decl in is_old_name, at tree-into-ssa.c:466)
2005-07-18 Daniel Berlin <dberlin@dberlin.org> Fix PR tree-optimization/22483 * tree-complex.c (create_components): Use safe_referenced_var_iterator and FOR_EACH_REFERENCED_VAR_SAFE. * tree-flow-inline.h (fill_referenced_var_vec): New function. * tree-flow.h (safe_referenced_var_iterator): New structure. (FOR_EACH_REFERENCED_VAR_SAFE): New macro. * tree-ssa-alias.c (setup_pointers_and_addressables): Use safe_referenced_var iterator. (add_type_alias): Ditto. From-SVN: r102150
Diffstat (limited to 'gcc/tree-ssa-alias.c')
-rw-r--r--gcc/tree-ssa-alias.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index 387a696..c65fe8d 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -1168,6 +1168,8 @@ setup_pointers_and_addressables (struct alias_info *ai)
size_t n_vars, num_addressable_vars, num_pointers;
referenced_var_iterator rvi;
tree var;
+ VEC (tree, heap) *varvec = NULL;
+ safe_referenced_var_iterator srvi;
/* Size up the arrays ADDRESSABLE_VARS and POINTERS. */
num_addressable_vars = num_pointers = 0;
@@ -1204,7 +1206,7 @@ setup_pointers_and_addressables (struct alias_info *ai)
unnecessarily. */
n_vars = num_referenced_vars;
- FOR_EACH_REFERENCED_VAR (var, rvi)
+ FOR_EACH_REFERENCED_VAR_SAFE (var, varvec, srvi)
{
var_ann_t v_ann = var_ann (var);
subvar_t svars;
@@ -1336,6 +1338,7 @@ setup_pointers_and_addressables (struct alias_info *ai)
}
}
}
+ VEC_free (tree, heap, varvec);
}
@@ -2218,14 +2221,14 @@ add_type_alias (tree ptr, tree var)
tree tag;
var_ann_t ann = var_ann (ptr);
subvar_t svars;
-
+ VEC (tree, heap) *varvec = NULL;
if (ann->type_mem_tag == NULL_TREE)
{
tree q = NULL_TREE;
tree tag_type = TREE_TYPE (TREE_TYPE (ptr));
HOST_WIDE_INT tag_set = get_alias_set (tag_type);
- referenced_var_iterator rvi;
+ safe_referenced_var_iterator rvi;
/* PTR doesn't have a type tag, create a new one and add VAR to
the new tag's alias set.
@@ -2234,7 +2237,7 @@ add_type_alias (tree ptr, tree var)
whether there is another pointer Q with the same alias set as
PTR. This could be sped up by having type tags associated
with types. */
- FOR_EACH_REFERENCED_VAR (q, rvi)
+ FOR_EACH_REFERENCED_VAR_SAFE (q, varvec, rvi)
{
if (POINTER_TYPE_P (TREE_TYPE (q))
&& tag_set == get_alias_set (TREE_TYPE (TREE_TYPE (q))))
@@ -2292,6 +2295,7 @@ found_tag:
for (i = 0; i < VARRAY_ACTIVE_SIZE (aliases); i++)
mark_sym_for_renaming (VARRAY_TREE (aliases, i));
}
+ VEC_free (tree, heap, varvec);
}
@@ -2766,7 +2770,8 @@ static void
create_structure_vars (void)
{
basic_block bb;
- referenced_var_iterator rvi;
+ safe_referenced_var_iterator rvi;
+ VEC (tree, heap) *varvec = NULL;
tree var;
used_portions = htab_create (10, used_part_map_hash, used_part_map_eq,
@@ -2782,7 +2787,7 @@ create_structure_vars (void)
NULL);
}
}
- FOR_EACH_REFERENCED_VAR (var, rvi)
+ FOR_EACH_REFERENCED_VAR_SAFE (var, varvec, rvi)
{
/* The C++ FE creates vars without DECL_SIZE set, for some reason. */
if (var
@@ -2793,6 +2798,7 @@ create_structure_vars (void)
create_overlap_variables_for (var);
}
htab_delete (used_portions);
+ VEC_free (tree, heap, varvec);
}