From e1ee61bfbdc89968bf9851d0d825d500704ff149 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 17 Mar 2016 13:19:02 +0000 Subject: compile.c: strict condition * compile.c (iseq_specialized_instruction): specialize only concatenated newarray and send, no labels and no adjusts. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54157 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- compile.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'compile.c') diff --git a/compile.c b/compile.c index 2518697eab..be2ab45eb4 100644 --- a/compile.c +++ b/compile.c @@ -2283,12 +2283,13 @@ insn_set_specialized_instruction(rb_iseq_t *iseq, INSN *iobj, int insn_id) static int iseq_specialized_instruction(rb_iseq_t *iseq, INSN *iobj) { - if (iobj->insn_id == BIN(newarray)) { + if (iobj->insn_id == BIN(newarray) && iobj->link.next && + iobj->link.next->type == ISEQ_ELEMENT_INSN) { /* * [a, b, ...].max/min -> a, b, c, opt_newarray_max/min */ - INSN *niobj = (INSN *)get_next_insn(iobj); - if (niobj && niobj->insn_id == BIN(send)) { + INSN *niobj = (INSN *)iobj->link.next; + if (niobj->insn_id == BIN(send)) { struct rb_call_info *ci = (struct rb_call_info *)OPERAND_AT(niobj, 0); if ((ci->flag & VM_CALL_ARGS_SIMPLE) && ci->orig_argc == 0) { switch (ci->mid) { -- cgit v1.2.3