diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-05-24 12:40:28 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-05-24 12:40:28 +0000 |
commit | 45014c846698ea141dd7340bbdb181e258840b7c (patch) | |
tree | 4d0ee86ac31210e10293afa2014bd8a23fbabb5f /gcc/alias.c | |
parent | eb65953e5fb04b26d1fdb09340cee6e262d601b7 (diff) | |
download | gcc-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.c | 18 |
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; |