From: Richard Kenner Date: Wed, 21 Oct 1992 11:33:55 +0000 (-0400) Subject: (do_store_flag): Ensure we don't get confused when emit_store_flag X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d39985fabf60fc4c42acf88a039a9b0bca027cc2;p=gcc.git (do_store_flag): Ensure we don't get confused when emit_store_flag fails and an operand has a QUEUED. From-SVN: r2540 --- diff --git a/gcc/expr.c b/gcc/expr.c index 632c3505b75..1641a9c3045 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -7160,8 +7160,14 @@ do_store_flag (exp, target, mode, only_cheap) if (target == 0) target = gen_reg_rtx (mode); - result = emit_store_flag (target, code, op0, op1, operand_mode, - unsignedp, 1); + /* Pass copies of OP0 and OP1 in case they contain a QUEUED. This is safe + because, if the emit_store_flag does anything it will succeed and + OP0 and OP1 will not be used subsequently. */ + + result = emit_store_flag (target, code, + queued_subexp_p (op0) ? copy_rtx (op0) : op0, + queued_subexp_p (op1) ? copy_rtx (op1) : op1, + operand_mode, unsignedp, 1); if (result) {