diff options
author | Peter Zhu <[email protected]> | 2024-08-15 14:33:13 -0400 |
---|---|---|
committer | Peter Zhu <[email protected]> | 2024-08-15 14:33:13 -0400 |
commit | 2c6e16eb51bccb98c2d4cfb7b35f6e6500d5d028 (patch) | |
tree | 28548e36557563115321a9241433184dabfd69d3 | |
parent | de28ef7db49f8f8d4a46df808e1fbbc18c053ba9 (diff) |
Don't assume st_data_t and VALUE are the same in rb_gc_impl_object_id
-rw-r--r-- | gc/default.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/gc/default.c b/gc/default.c index 87f570c2c6..28923a79c7 100644 --- a/gc/default.c +++ b/gc/default.c @@ -1683,8 +1683,10 @@ rb_gc_impl_object_id(void *objspace_ptr, VALUE obj) rb_objspace_t *objspace = objspace_ptr; unsigned int lev = rb_gc_vm_lock(); - if (st_lookup(objspace->obj_to_id_tbl, (st_data_t)obj, &id)) { + st_data_t val; + if (st_lookup(objspace->obj_to_id_tbl, (st_data_t)obj, &val)) { GC_ASSERT(FL_TEST(obj, FL_SEEN_OBJ_ID)); + id = (VALUE)val; } else { GC_ASSERT(!FL_TEST(obj, FL_SEEN_OBJ_ID)); |