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) {