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 <seg...@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