aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog2
-rw-r--r--gcc/expr.c7
2 files changed, 6 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 97f5d00..e378c87 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/expr.c b/gcc/expr.c
index 69c6f56..5fc55e5 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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));