* explow.c (set_mem_attributes): Avoid returning a bogus alias set
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 22 Aug 2001 14:53:20 +0000 (14:53 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 22 Aug 2001 14:53:20 +0000 (14:53 +0000)
        from a new MEM.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45108 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/explow.c

index 4948e50..b180df7 100644 (file)
@@ -1,5 +1,8 @@
 2001-08-22  Jason Merrill  <jason_merrill@redhat.com>
 
+       * explow.c (set_mem_attributes): Avoid returning a bogus alias set
+       from a new MEM.
+
        * jump.c (squeeze_notes): Take parms by reference.  Handle END being
        a squeezable note.
        * rtl.h: Adjust.
index 3a7716f..d01067d 100644 (file)
@@ -670,7 +670,16 @@ set_mem_attributes (ref, t, objectp)
      here, because, in C and C++, the fact that a location is accessed
      through a const expression does not mean that the value there can
      never change.  */
+
+  /* If we have already set DECL_RTL = ref, get_alias_set will get the
+     wrong answer, as it assumes that DECL_RTL already has the right alias
+     info.  Callers should not set DECL_RTL until after the call to
+     set_mem_attributes.  */
+  if (DECL_P (t) && ref == DECL_RTL_IF_SET (t))
+    abort ();
+
   set_mem_alias_set (ref, get_alias_set (t));
+
   MEM_VOLATILE_P (ref) = TYPE_VOLATILE (type);
   MEM_IN_STRUCT_P (ref) = AGGREGATE_TYPE_P (type);