diff options
author | Diego Novillo <dnovillo@redhat.com> | 2004-07-24 01:05:45 +0000 |
---|---|---|
committer | Diego Novillo <dnovillo@gcc.gnu.org> | 2004-07-23 21:05:45 -0400 |
commit | bbc630f5d95b858bcea31cec1ce2f1d25c6b6fc6 (patch) | |
tree | 152cb570bb5673abd6f3cb0e91129d27c8889d40 /gcc/tree-ssa-alias.c | |
parent | 368bf4a1843bfd8edf1fac035e4e703bb9fabf4a (diff) | |
download | gcc-bbc630f5d95b858bcea31cec1ce2f1d25c6b6fc6.zip gcc-bbc630f5d95b858bcea31cec1ce2f1d25c6b6fc6.tar.gz gcc-bbc630f5d95b858bcea31cec1ce2f1d25c6b6fc6.tar.bz2 |
re PR tree-optimization/16688 (ICE in group_aliases, at tree-ssa-alias.c:1234)
PR tree-optimization/16688
PR tree-optimization/16689
* tree-ssa-alias.c (setup_pointers_and_addressables): Remove
unnecessary initialization of 'tag'.
(get_tmt_for): Check that the new type tag has the same alias
set as the pointed-to type.
(group_aliases): Only regular variables need to be removed
from the alias set of a name tag.
* tree-ssa-copy.c (may_propagate_copy): Do not allow copy
propagation if the two types are not compatible.
(merge_alias_info): Rename from replace_ssa_names_ann.
Add more checking.
(replace_exp_1): If both arguments are SSA_NAMEs, check that
the propagation can be done.
Only call merge_alias_info on pointers.
(propagate_value): Likewise.
* tree-ssa-copyrename.c: Include langhooks.h.
(copy_rename_partition_coalesce): Call replace_ssa_name_symbol
to do the merging.
Do not coalesce variables with incompatible types.
(rename_ssa_copies): Call replace_ssa_name_symbol.
* tree-ssa.c (verify_ssa_name): Verify that the SSA_NAME has
the same type as the underlying _DECL.
* tree-ssanames.c (replace_ssa_name_symbol): New function.
* tree.h (replace_ssa_name_symbol): Declare.
From-SVN: r85108
Diffstat (limited to 'gcc/tree-ssa-alias.c')
-rw-r--r-- | gcc/tree-ssa-alias.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index a854b0b..fab9e02 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -1225,7 +1225,8 @@ group_aliases (struct alias_info *ai) { tree alias = VARRAY_TREE (aliases, j); var_ann_t ann = var_ann (alias); - if (ann->may_aliases) + + if (ann->mem_tag_kind == NOT_A_TAG && ann->may_aliases) { tree new_alias; @@ -1370,7 +1371,7 @@ setup_pointers_and_addressables (struct alias_info *ai) && (bitmap_bit_p (ai->dereferenced_ptrs_store, v_ann->uid) || bitmap_bit_p (ai->dereferenced_ptrs_load, v_ann->uid))) { - tree tag = v_ann->type_mem_tag; + tree tag; var_ann_t t_ann; /* If pointer VAR still doesn't have a memory tag associated @@ -2170,6 +2171,14 @@ get_tmt_for (tree ptr, struct alias_info *ai) ai->pointers[ai->num_pointers++] = alias_map; } +#if defined ENABLE_CHECKING + /* Make sure that the type tag has the same alias set as the + pointed-to type. */ + if (tag_set != get_alias_set (tag)) + abort (); +#endif + + return tag; } |