mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
compile.c: fix peephole optimization
* compile.c (iseq_peephole_optimize): should `pop` before jump instruction which succeeds to `newarray` of a literal object, not after. [ruby-core:89536] [Bug #15245] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65350 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
cd0181dd68
commit
71b0d20f7e
2 changed files with 7 additions and 1 deletions
|
@ -2913,7 +2913,7 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal
|
|||
}
|
||||
else if (!iseq_pop_newarray(iseq, pobj)) {
|
||||
pobj = new_insn_core(iseq, pobj->insn_info.line_no, BIN(pop), 0, NULL);
|
||||
ELEM_INSERT_NEXT(&iobj->link, &pobj->link);
|
||||
ELEM_INSERT_PREV(&iobj->link, &pobj->link);
|
||||
}
|
||||
if (cond) {
|
||||
if (prev_dup) {
|
||||
|
|
|
@ -794,4 +794,10 @@ class TestRubyOptimization < Test::Unit::TestCase
|
|||
end
|
||||
assert_equal(:ok, x.bug(:ok))
|
||||
end
|
||||
|
||||
def test_peephole_jump_after_newarray
|
||||
i = 0
|
||||
%w(1) || 2 while (i += 1) < 100
|
||||
assert_equal(100, i)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue