From e4fc85dfcf3b089ce8522f8dc694d7ed338603ee Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 18 Nov 2015 02:08:17 +0000 Subject: [PATCH] compile.c: check type before checking insn_id * compile.c (iseq_peephole_optimize): check element type before checking insn_id which is valid only for INSN elements. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52632 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- compile.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/compile.c b/compile.c index 2d47082618..f66f12e94b 100644 --- a/compile.c +++ b/compile.c @@ -1998,7 +1998,13 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal */ INSN *nobj = (INSN *)get_destination_insn(iobj); INSN *pobj = (INSN *)iobj->link.prev; - int prev_dup = (pobj && pobj->insn_id == BIN(dup)); + int prev_dup = 0; + if (pobj) { + if (pobj->link.type != ISEQ_ELEMENT_INSN) + pobj = 0; + else if (pobj->insn_id == BIN(dup)) + prev_dup = 1; + } for (;;) { if (nobj->insn_id == BIN(jump)) {