From c0baa381b5293abfe2c06a5ecdf10551c05c92f9 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 25 Aug 2017 03:41:43 +0000 Subject: [PATCH] compile.c: unreachable chunk * compile.c (iseq_peephole_optimize): remove unreachable chunk which appeared by useless jump elimination. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59656 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- compile.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/compile.c b/compile.c index 2ae62b03f5..aa83031fd7 100644 --- a/compile.c +++ b/compile.c @@ -2168,6 +2168,7 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal */ unref_destination(iobj, 0); REMOVE_ELEM(&iobj->link); + return COMPILE_OK; } else if (iobj != diobj && IS_INSN_ID(diobj, jump) && OPERAND_AT(iobj, 0) != OPERAND_AT(diobj, 0)) { @@ -2229,6 +2230,7 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal ? BIN(branchunless) : BIN(branchif); replace_destination(piobj, iobj); REMOVE_ELEM(&iobj->link); + return COMPILE_OK; } else if (diobj == pdiobj) { /* @@ -2249,7 +2251,7 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal REPLACE_ELEM(&piobj->link, &popiobj->link); } } - else if (remove_unreachable_chunk(iseq, iobj->link.next)) { + if (remove_unreachable_chunk(iseq, iobj->link.next)) { goto again; } }