diff options
author | Richard Henderson <rth@redhat.com> | 2001-01-26 14:32:51 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2001-01-26 14:32:51 -0800 |
commit | 66cce54da0e53c27e2b59ebb416c95e54191e9fc (patch) | |
tree | 4ab095b755e11bdca971d1ee0b306a5ff2acff6f | |
parent | 616fde536ecb92831bff313532f99121c9695c5a (diff) | |
download | gcc-66cce54da0e53c27e2b59ebb416c95e54191e9fc.zip gcc-66cce54da0e53c27e2b59ebb416c95e54191e9fc.tar.gz gcc-66cce54da0e53c27e2b59ebb416c95e54191e9fc.tar.bz2 |
alias.c (objects_must_conflict_p): Read-only slots may not conflict despite having the same type.
* alias.c (objects_must_conflict_p): Read-only slots may not
conflict despite having the same type.
From-SVN: r39285
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/alias.c | 21 |
2 files changed, 17 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c2dcc4e..1441a6f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-01-26 Richard Henderson <rth@redhat.com> + + * alias.c (objects_must_conflict_p): Read-only slots may not + conflict despite having the same type. + 2001-01-27 Michael Hayes <mhayes@redhat.com> * loop.c (loop_giv_reduce_benefit): Copy mode size into diff --git a/gcc/alias.c b/gcc/alias.c index 6e92533..85bce38 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -309,21 +309,24 @@ int objects_must_conflict_p (t1, t2) tree t1, t2; { + /* If one or the other has readonly fields or is readonly, + then they may not conflict. */ + if ((t1 != 0 && readonly_fields_p (t1)) + || (t2 != 0 && readonly_fields_p (t2)) + || (t1 != 0 && TYPE_READONLY (t1)) + || (t2 != 0 && TYPE_READONLY (t2))) + return 0; + /* If they are the same type, they must conflict. */ if (t1 == t2 /* Likewise if both are volatile. */ || (t1 != 0 && TYPE_VOLATILE (t1) && t2 != 0 && TYPE_VOLATILE (t2))) return 1; - /* We now know they are different types. If one or both has readonly fields - or if one is readonly and the other not, they may not conflict. - Likewise if one is aggregate and the other is scalar. */ - if ((t1 != 0 && readonly_fields_p (t1)) - || (t2 != 0 && readonly_fields_p (t2)) - || ((t1 != 0 && TYPE_READONLY (t1)) - != (t2 != 0 && TYPE_READONLY (t2))) - || ((t1 != 0 && AGGREGATE_TYPE_P (t1)) - != (t2 != 0 && AGGREGATE_TYPE_P (t2)))) + /* If one is aggregate and the other is scalar then they may not + conflict. */ + if ((t1 != 0 && AGGREGATE_TYPE_P (t1)) + != (t2 != 0 && AGGREGATE_TYPE_P (t2))) return 0; /* Otherwise they conflict only if the alias sets conflict. */ |