diff options
author | Daniel Berlin <dberlin@dberlin.org> | 2005-04-11 20:15:33 +0000 |
---|---|---|
committer | Daniel Berlin <dberlin@gcc.gnu.org> | 2005-04-11 20:15:33 +0000 |
commit | 945891207919f9486961857c5de8db42a4771687 (patch) | |
tree | 5d436d627d39db10a9dd78f74cca0af2b9c8c1da /gcc/tree-ssa-alias.c | |
parent | 19f1ebc794e936ef25955c0404e6dac505e6e41e (diff) | |
download | gcc-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.c | 14 |
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); |