diff --git a/gc.c b/gc.c index 4a39a7a65f0..ef193dc8efa 100644 --- a/gc.c +++ b/gc.c @@ -1380,7 +1380,7 @@ rb_gc_imemo_needs_cleanup_p(VALUE obj) return ((rb_imemo_tmpbuf_t *)obj)->ptr != NULL; case imemo_fields: - return FL_TEST_RAW(obj, OBJ_FIELD_HEAP); + return rb_obj_shape_complex_p(obj); } UNREACHABLE_RETURN(true); } diff --git a/imemo.c b/imemo.c index f416e219ed1..4818876a3ea 100644 --- a/imemo.c +++ b/imemo.c @@ -613,7 +613,7 @@ static inline void imemo_fields_free(struct rb_fields *fields) { if (rb_obj_shape_complex_p((VALUE)fields)) { - st_free_table(&fields->as.complex.table); + st_free_embedded_table(&fields->as.complex.table); } }