summaryrefslogtreecommitdiff
path: root/compile.c
diff options
context:
space:
mode:
authornagachika <nagachika@ruby-lang.org>2021-02-11 12:52:11 +0900
committernagachika <nagachika@ruby-lang.org>2021-02-11 12:52:11 +0900
commitc271c7a225c6175f56f00b785e3034cb4a2b7658 (patch)
tree407a214aca1b4b3262f1226ce0a447332c06a980 /compile.c
parent29bc77f780bbefca60724e52129f5229aa373551 (diff)
merge revision(s) ce7a053475cbebfb2f3e5ed6614e0ba631541917,1cbb1f1720127b0b34b38c77e27b51b182008699: [Backport #16695]
Adjust sp for `x = false; y = (return until x unless x)` [Bug #16695] --- compile.c | 8 +++----- test/ruby/test_syntax.rb | 9 +++++++++ 2 files changed, 12 insertions(+), 5 deletions(-) test/ruby/test_syntax.rb: avoid "warning: assigned but unused variable" --- test/ruby/test_syntax.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Diffstat (limited to 'compile.c')
-rw-r--r--compile.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/compile.c b/compile.c
index 5f86a5bd67..c05a4a0804 100644
--- a/compile.c
+++ b/compile.c
@@ -2737,7 +2737,6 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal
goto again;
}
else if (IS_INSN_ID(diobj, leave)) {
- INSN *pop;
/*
* jump LABEL
* ...
@@ -2745,7 +2744,6 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal
* leave
* =>
* leave
- * pop
* ...
* LABEL:
* leave
@@ -2755,9 +2753,6 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal
iobj->insn_id = BIN(leave);
iobj->operand_size = 0;
iobj->insn_info = diobj->insn_info;
- /* adjust stack depth */
- pop = new_insn_body(iseq, diobj->insn_info.line_no, BIN(pop), 0);
- ELEM_INSERT_NEXT(&iobj->link, &pop->link);
goto again;
}
else if (IS_INSN(iobj->link.prev) &&
@@ -5247,6 +5242,9 @@ compile_if(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int
branches);
end_label = NEW_LABEL(line);
ADD_INSNL(then_seq, line, jump, end_label);
+ if (!popped) {
+ ADD_INSN(then_seq, line, pop);
+ }
}
ADD_SEQ(ret, then_seq);
}