diff --git a/gc.c b/gc.c index f344bb88b1..bf495bab4e 100644 --- a/gc.c +++ b/gc.c @@ -7256,6 +7256,10 @@ gc_is_moveable_obj(rb_objspace_t *objspace, VALUE obj) case T_ZOMBIE: return FALSE; break; + case T_SYMBOL: + if (DYNAMIC_SYM_P(obj) && (RSYMBOL(obj)->id & ~ID_SCOPE_MASK)) { + return FALSE; + } case T_STRING: case T_OBJECT: case T_FLOAT: @@ -7266,7 +7270,6 @@ gc_is_moveable_obj(rb_objspace_t *objspace, VALUE obj) case T_MODULE: case T_REGEXP: case T_DATA: - case T_SYMBOL: case T_MATCH: case T_STRUCT: case T_HASH: