From: Richard Henderson <rth@redhat.com>
Date: Fri, 26 Jan 2001 22:32:51 +0000 (-0800)
Subject: alias.c (objects_must_conflict_p): Read-only slots may not conflict despite having... 
X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=66cce54da0e53c27e2b59ebb416c95e54191e9fc;p=gcc.git

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

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c2dcc4e422e..1441a6f49f1 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 6e92533a098..85bce38c70f 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. */