From d39985fabf60fc4c42acf88a039a9b0bca027cc2 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Wed, 21 Oct 1992 07:33:55 -0400 Subject: [PATCH] (do_store_flag): Ensure we don't get confused when emit_store_flag fails and an operand has a QUEUED. From-SVN: r2540 --- gcc/expr.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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) { -- 2.30.2