diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-04-18 13:14:06 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-04-18 13:14:06 +0000 |
commit | e3ff7770d8b191d2217fa04071c67e1d62fb5fe5 (patch) | |
tree | e7aafe6433d6b8deba54e20fe63d830a2bf58353 /compile.c | |
parent | 768dd827743e180d5a95a189988fe93337dcc295 (diff) | |
download | ruby-e3ff7770d8b191d2217fa04071c67e1d62fb5fe5.tar.gz |
compile.c: wrong optimization
* compile.c (compile_branch_condition): expression which has side
effects should not be eliminated.
[ruby-core:80740] [Bug #13444]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58398 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'compile.c')
-rw-r--r-- | compile.c | 12 |
1 files changed, 1 insertions, 11 deletions
@@ -2249,7 +2249,7 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal OPERAND_AT(pobj, 0) == Qfalse : FALSE); } - else if (IS_INSN_ID(pobj, putstring)) { + else if (IS_INSN_ID(pobj, putstring) || IS_INSN_ID(pobj, duparray)) { cond = IS_INSN_ID(iobj, branchif); } else if (IS_INSN_ID(pobj, putnil)) { @@ -2907,18 +2907,8 @@ compile_branch_condition(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *cond, case NODE_LIT: /* NODE_LIT is always true */ case NODE_TRUE: case NODE_STR: - case NODE_DSTR: - case NODE_XSTR: - case NODE_DXSTR: - case NODE_DREGX: - case NODE_DREGX_ONCE: - case NODE_DSYM: - case NODE_ARRAY: case NODE_ZARRAY: - case NODE_HASH: case NODE_LAMBDA: - case NODE_DEFN: - case NODE_DEFS: /* printf("useless condition eliminate (%s)\n", ruby_node_name(nd_type(cond))); */ ADD_INSNL(ret, nd_line(cond), jump, then_label); break; |