aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2004-02-02 20:37:29 -0800
committerRichard Henderson <rth@gcc.gnu.org>2004-02-02 20:37:29 -0800
commitb0dccb002204bff9f017d83584f3a516e703825e (patch)
tree78d3b6b9d689604f8173226d290f76aadab890d4 /gcc
parent06a81b60c25f9fdd1da702cc1914187f407d8219 (diff)
downloadgcc-b0dccb002204bff9f017d83584f3a516e703825e.zip
gcc-b0dccb002204bff9f017d83584f3a516e703825e.tar.gz
gcc-b0dccb002204bff9f017d83584f3a516e703825e.tar.bz2
re PR target/13789 ([tree-ssa] ICE on _builtin_expect_addr)
PR target/13789 * expr.c (store_expr): Use force_operand before emit_move_insn. From-SVN: r77158
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/expr.c6
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20040202-1.c8
3 files changed, 18 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a467635..8e2f3c1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-02-02 Richard Henderson <rth@redhat.com>
+
+ PR target/13789
+ * expr.c (store_expr): Use force_operand before emit_move_insn.
+
2004-02-02 Jeff Law <law@redhat.com>
Roger Sayle <roger@eyesopen.com>
diff --git a/gcc/expr.c b/gcc/expr.c
index 8bf0732..ba27b04 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -4334,7 +4334,11 @@ store_expr (tree exp, rtx target, int want_value)
(want_value & 2
? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL));
else
- emit_move_insn (target, temp);
+ {
+ temp = force_operand (temp, target);
+ if (temp != target)
+ emit_move_insn (target, temp);
+ }
}
/* If we don't want a value, return NULL_RTX. */
diff --git a/gcc/testsuite/gcc.c-torture/compile/20040202-1.c b/gcc/testsuite/gcc.c-torture/compile/20040202-1.c
new file mode 100644
index 0000000..ba32c80
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20040202-1.c
@@ -0,0 +1,8 @@
+/* PR target/13789 */
+/* Failed on SPARC due to a bug in store_expr. */
+
+void *foo (void *c)
+{
+ void *a = __builtin_extract_return_addr (c);
+ return a;
+}