This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] nds32: Fix casesi (PR70668)
- From: Segher Boessenkool <segher at kernel dot crashing dot org>
- To: gcc-patches at gcc dot gnu dot org
- Cc: jasonwucj at gmail dot com, shiva0217 at gmail dot com, Segher Boessenkool <segher at kernel dot crashing dot org>
- Date: Thu, 28 Apr 2016 15:45:50 +0000
- Subject: [PATCH] nds32: Fix casesi (PR70668)
- Authentication-results: sourceware.org; auth=none
Expanders do not have more elements in the operands array than declared
in the pattern. So, we cannot use operands[5] here. Instead just
declare and use another rtx.
Built with a cross compiler; not tested otherwise. Is this okay for trunk?
Segher
2016-04-28 Segher Boessenkool <segher@kernel.crashing.org>
PR target/70668
* config/nds32/nds32.md (casesi): Don't access the operands array
out of bounds.
---
gcc/config/nds32/nds32.md | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/gcc/config/nds32/nds32.md b/gcc/config/nds32/nds32.md
index 5cdd8b2..494a78d 100644
--- a/gcc/config/nds32/nds32.md
+++ b/gcc/config/nds32/nds32.md
@@ -2288,11 +2288,9 @@ (define_expand "casesi"
emit_jump_insn (gen_cbranchsi4 (test, operands[0], operands[2],
operands[4]));
- operands[5] = gen_reg_rtx (SImode);
- /* Step C, D, E, and F, using another temporary register operands[5]. */
- emit_jump_insn (gen_casesi_internal (operands[0],
- operands[3],
- operands[5]));
+ /* Step C, D, E, and F, using another temporary register. */
+ rtx tmp = gen_reg_rtx (SImode);
+ emit_jump_insn (gen_casesi_internal (operands[0], operands[3], tmp));
DONE;
})
--
1.9.3