* expr.c (store_constructor): Don't clobber TARGET if CLEARED.
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 27 Nov 1999 14:47:23 +0000 (14:47 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 27 Nov 1999 14:47:23 +0000 (14:47 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@30676 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/expr.c

index 97f5d00..e378c87 100644 (file)
@@ -1,5 +1,7 @@
 Sat Nov 27 08:38:26 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
+       * expr.c (store_constructor): Don't clobber TARGET if CLEARED.
+
        * combine.c (try_combine): Add code to try to merge a set of a
        two-word pseudo to a constant with a setting of one of those words
        to a constant.
index 69c6f56..5fc55e5 100644 (file)
@@ -4088,8 +4088,9 @@ store_constructor (exp, target, align, cleared)
       register tree elt;
 
       /* Inform later passes that the whole union value is dead.  */
-      if (TREE_CODE (type) == UNION_TYPE
-         || TREE_CODE (type) == QUAL_UNION_TYPE)
+      if ((TREE_CODE (type) == UNION_TYPE
+          || TREE_CODE (type) == QUAL_UNION_TYPE)
+         && ! cleared)
        {
          emit_insn (gen_rtx_CLOBBER (VOIDmode, target));
 
@@ -4125,7 +4126,7 @@ store_constructor (exp, target, align, cleared)
 
          cleared = 1;
        }
-      else
+      else if (! cleared)
        /* Inform later passes that the old value is dead.  */
        emit_insn (gen_rtx_CLOBBER (VOIDmode, target));