diff options
author | Richard Henderson <rth@redhat.com> | 2004-02-02 20:37:29 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-02-02 20:37:29 -0800 |
commit | b0dccb002204bff9f017d83584f3a516e703825e (patch) | |
tree | 78d3b6b9d689604f8173226d290f76aadab890d4 /gcc | |
parent | 06a81b60c25f9fdd1da702cc1914187f407d8219 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/expr.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/20040202-1.c | 8 |
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> @@ -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; +} |