From b0dccb002204bff9f017d83584f3a516e703825e Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Mon, 2 Feb 2004 20:37:29 -0800 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/expr.c | 6 +++++- gcc/testsuite/gcc.c-torture/compile/20040202-1.c | 8 ++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/20040202-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a467635fd04..8e2f3c1c683 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-02-02 Richard Henderson + + PR target/13789 + * expr.c (store_expr): Use force_operand before emit_move_insn. + 2004-02-02 Jeff Law Roger Sayle diff --git a/gcc/expr.c b/gcc/expr.c index 8bf073252e2..ba27b04d115 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 00000000000..ba32c804905 --- /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; +} -- 2.30.2