summaryrefslogtreecommitdiff
path: root/gcc/alias.c
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2011-05-24 12:40:28 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2011-05-24 12:40:28 +0000
commit45014c846698ea141dd7340bbdb181e258840b7c (patch)
tree4d0ee86ac31210e10293afa2014bd8a23fbabb5f /gcc/alias.c
parenteb65953e5fb04b26d1fdb09340cee6e262d601b7 (diff)
downloadgcc-45014c846698ea141dd7340bbdb181e258840b7c.tar.gz
2011-05-24 Richard Guenther <rguenther@suse.de>
PR bootstrap/49078 * gimple.c (gimple_register_canonical_type): Revert previous change. * alias.c (get_alias_set): Only assert that TYPE_CANONICAL does not for a tree for the case where it matters. Cache pointer-type alias-sets. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174113 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/alias.c')
-rw-r--r--gcc/alias.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/gcc/alias.c b/gcc/alias.c
index c2a2c9d8655..b32e6b37cac 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -709,10 +709,8 @@ get_alias_set (tree t)
t = TYPE_CANONICAL (t);
- /* Canonical types shouldn't form a tree nor should the canonical
- type require structural equality checks. */
- gcc_checking_assert (TYPE_CANONICAL (t) == t
- && !TYPE_STRUCTURAL_EQUALITY_P (t));
+ /* The canonical type should not require structural equality checks. */
+ gcc_checking_assert (!TYPE_STRUCTURAL_EQUALITY_P (t));
/* If this is a type with a known alias set, return it. */
if (TYPE_ALIAS_SET_KNOWN_P (t))
@@ -813,11 +811,19 @@ get_alias_set (tree t)
That's simple and avoids all the above problems. */
else if (POINTER_TYPE_P (t)
&& t != ptr_type_node)
- return get_alias_set (ptr_type_node);
+ set = get_alias_set (ptr_type_node);
/* Otherwise make a new alias set for this type. */
else
- set = new_alias_set ();
+ {
+ /* Each canonical type gets its own alias set, so canonical types
+ shouldn't form a tree. It doesn't really matter for types
+ we handle specially above, so only check it where it possibly
+ would result in a bogus alias set. */
+ gcc_checking_assert (TYPE_CANONICAL (t) == t);
+
+ set = new_alias_set ();
+ }
TYPE_ALIAS_SET (t) = set;