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
This commit is contained in:
Richard Henderson 2001-01-26 14:32:51 -08:00 committed by Richard Henderson
parent 616fde536e
commit 66cce54da0
2 changed files with 17 additions and 9 deletions

View File

@ -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

View File

@ -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. */