diff --git a/gc.c b/gc.c index 140fc5047f..8e4190f352 100644 --- a/gc.c +++ b/gc.c @@ -9346,8 +9346,12 @@ rb_raw_obj_info(char *buff, const int buff_size, VALUE obj) break; } case T_DATA: { + const struct rb_block *block; const rb_iseq_t *iseq; - if (rb_obj_is_proc(obj) && (iseq = vm_proc_iseq(obj)) != NULL) { + if (rb_obj_is_proc(obj) && + (block = vm_proc_block(obj)) != NULL && + (vm_block_type(block) == block_type_iseq) && + (iseq = vm_block_iseq(block)) != NULL) { rb_raw_iseq_info(buff, buff_size, iseq); } else { diff --git a/vm_core.h b/vm_core.h index f2ea983d36..3691d13fa5 100644 --- a/vm_core.h +++ b/vm_core.h @@ -1406,7 +1406,6 @@ vm_proc_ep(VALUE procval) static inline const rb_iseq_t * vm_block_iseq(const struct rb_block *block) { - if (!block) return NULL; switch (vm_block_type(block)) { case block_type_iseq: return rb_iseq_check(block->as.captured.code.iseq); case block_type_proc: return vm_proc_iseq(block->as.proc);