OSDN Git Service

* expr.c (store_constructor): Set RTX_UNCHANGING_P if readonly_field_p
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 21 Apr 2003 17:50:51 +0000 (17:50 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 21 Apr 2003 17:50:51 +0000 (17:50 +0000)
before clearing.

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

gcc/ChangeLog
gcc/expr.c

index fecac21..0234146 100644 (file)
@@ -1,3 +1,8 @@
+2003-04-21  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * expr.c (store_constructor): Set RTX_UNCHANGING_P if readonly_field_p
+       before clearing.
+
 2003-04-21  Mark Mitchell  <mark@codesourcery.com>
 
        * config/i386/winnt.c (i386_pe_mark_dllimport): Make the new RTL
index abf0875..f87f9c9 100644 (file)
@@ -4899,7 +4899,15 @@ store_constructor (exp, target, cleared, size)
                   || ((HOST_WIDE_INT) GET_MODE_SIZE (GET_MODE (target))
                       == size)))
        {
-         clear_storage (target, GEN_INT (size));
+         rtx xtarget = target;
+
+         if (readonly_fields_p (type))
+           {
+             xtarget = copy_rtx (xtarget);
+             RTX_UNCHANGING_P (xtarget) = 1;
+           }
+
+         clear_storage (xtarget, GEN_INT (size));
          cleared = 1;
        }