diff --git a/compile.c b/compile.c index ef92a83846..d34376c572 100644 --- a/compile.c +++ b/compile.c @@ -2942,6 +2942,15 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal else if (previ == BIN(newarray) && iseq_pop_newarray(iseq, (INSN*)prev)) { ELEM_REMOVE(&iobj->link); } + else if (previ == BIN(concatstrings)) { + if (OPERAND_AT(prev, 0) == INT2FIX(1)) { + ELEM_REMOVE(prev); + } + else { + ELEM_REMOVE(&iobj->link); + INSN_OF(prev) = BIN(adjuststack); + } + } } }