diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-12 19:37:16 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-12 19:37:16 +0000 |
commit | 161b2e264fcfc0ecb046b35245139e02847bbdb0 (patch) | |
tree | 37c80ca28abd603af769d37aabfbf7cf70114d10 /compile.c | |
parent | fc234a916a18f27b47005358c8ae3f7e4205415a (diff) | |
download | ruby-161b2e264fcfc0ecb046b35245139e02847bbdb0.tar.gz |
* compile.c (iseq_peephole_optimize): fix peephole optimization
bug. [ruby-dev:31360]
* bootstraptest/test_syntax.rb: add a test for above.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12924 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'compile.c')
-rw-r--r-- | compile.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -1318,8 +1318,10 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal REMOVE_ELEM(&iobj->link); } else if (iobj != diobj && diobj->insn_id == BIN(jump)) { - OPERAND_AT(iobj, 0) = OPERAND_AT(diobj, 0); - goto again; + if (OPERAND_AT(iobj, 0) != OPERAND_AT(diobj, 0)) { + OPERAND_AT(iobj, 0) = OPERAND_AT(diobj, 0); + goto again; + } } else if (diobj->insn_id == BIN(leave)) { /* |