aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-alias.c
diff options
context:
space:
mode:
authorDaniel Berlin <dberlin@dberlin.org>2005-04-11 20:15:33 +0000
committerDaniel Berlin <dberlin@gcc.gnu.org>2005-04-11 20:15:33 +0000
commit945891207919f9486961857c5de8db42a4771687 (patch)
tree5d436d627d39db10a9dd78f74cca0af2b9c8c1da /gcc/tree-ssa-alias.c
parent19f1ebc794e936ef25955c0404e6dac505e6e41e (diff)
downloadgcc-945891207919f9486961857c5de8db42a4771687.zip
gcc-945891207919f9486961857c5de8db42a4771687.tar.gz
gcc-945891207919f9486961857c5de8db42a4771687.tar.bz2
re PR tree-optimization/20926 (ICE: tree check, in recent builds)
2005-04-11 Daniel Berlin <dberlin@dberlin.org> Fix PR tree-optimization/20926 * tree-ssa-alias.c (add_type_alias): Handle subvars. From-SVN: r97982
Diffstat (limited to 'gcc/tree-ssa-alias.c')
-rw-r--r--gcc/tree-ssa-alias.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index 0f70017..7d8e783 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -2704,6 +2704,7 @@ add_type_alias (tree ptr, tree var)
varray_type aliases;
tree tag;
var_ann_t ann = var_ann (ptr);
+ subvar_t svars;
if (ann->type_mem_tag == NULL_TREE)
{
@@ -2748,7 +2749,18 @@ found_tag:
for PTR's type tag. */
gcc_assert (var_ann (var)->type_mem_tag == NOT_A_TAG);
tag = ann->type_mem_tag;
- add_may_alias (tag, var);
+
+ /* If VAR has subvars, add the subvars to the tag instead of the
+ actual var. */
+ if (var_can_have_subvars (var)
+ && (svars = get_subvars_for_var (var)))
+ {
+ subvar_t sv;
+ for (sv = svars; sv; sv = sv->next)
+ add_may_alias (tag, sv->var);
+ }
+ else
+ add_may_alias (tag, var);
/* TAG and its set of aliases need to be marked for renaming. */
mark_sym_for_renaming (tag);