From 9f4524f299d5c40498269b23c4fe32a4058b6ca1 Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Sat, 8 Dec 2001 10:49:49 +0000 Subject: [PATCH] final.c (cleanup_subreg_operands): Use recog_data.operand_loc in test for a subreg. * final.c (cleanup_subreg_operands): Use recog_data.operand_loc in test for a subreg. From-SVN: r47788 --- gcc/final.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gcc/final.c b/gcc/final.c index 16c95de..a17c3ac 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -2726,7 +2726,12 @@ cleanup_subreg_operands (insn) extract_insn_cached (insn); for (i = 0; i < recog_data.n_operands; i++) { - if (GET_CODE (recog_data.operand[i]) == SUBREG) + /* The following test cannot use recog_data.operand when tesing + for a SUBREG: the underlying object might have been changed + already if we are inside a match_operator expression that + matches the else clause. Instead we test the underlying + expression directly. */ + if (GET_CODE (*recog_data.operand_loc[i]) == SUBREG) recog_data.operand[i] = alter_subreg (recog_data.operand_loc[i]); else if (GET_CODE (recog_data.operand[i]) == PLUS || GET_CODE (recog_data.operand[i]) == MULT -- 2.7.4