diff --git a/iseq.c b/iseq.c index d267c7e08b..3d18fb597a 100644 --- a/iseq.c +++ b/iseq.c @@ -354,11 +354,13 @@ rb_iseq_mark_and_move(rb_iseq_t *iseq, bool reference_updating) } } - if (body->param.flags.has_kw && ISEQ_COMPILE_DATA(iseq) == NULL) { + if (body->param.flags.has_kw && body->param.keyword != NULL) { const struct rb_iseq_param_keyword *const keyword = body->param.keyword; - for (int j = 0, i = keyword->required_num; i < keyword->num; i++, j++) { - rb_gc_mark_and_move(&keyword->default_values[j]); + if (keyword->default_values != NULL) { + for (int j = 0, i = keyword->required_num; i < keyword->num; i++, j++) { + rb_gc_mark_and_move(&keyword->default_values[j]); + } } }