diff options
Diffstat (limited to 'gc')
-rw-r--r-- | gc/default/default.c | 3 | ||||
-rw-r--r-- | gc/mmtk/mmtk.c | 2 |
2 files changed, 4 insertions, 1 deletions
diff --git a/gc/default/default.c b/gc/default/default.c index 1b45d4b724..5664b3dd90 100644 --- a/gc/default/default.c +++ b/gc/default/default.c @@ -6006,9 +6006,10 @@ rb_gc_impl_writebarrier(void *objspace_ptr, VALUE a, VALUE b) if (RGENGC_CHECK_MODE) { if (SPECIAL_CONST_P(a)) rb_bug("rb_gc_writebarrier: a is special const: %"PRIxVALUE, a); - if (SPECIAL_CONST_P(b)) rb_bug("rb_gc_writebarrier: b is special const: %"PRIxVALUE, b); } + if (SPECIAL_CONST_P(b)) return; + GC_ASSERT(RB_BUILTIN_TYPE(a) != T_NONE); GC_ASSERT(RB_BUILTIN_TYPE(a) != T_MOVED); GC_ASSERT(RB_BUILTIN_TYPE(a) != T_ZOMBIE); diff --git a/gc/mmtk/mmtk.c b/gc/mmtk/mmtk.c index 41e7f13972..9e4ee9f3de 100644 --- a/gc/mmtk/mmtk.c +++ b/gc/mmtk/mmtk.c @@ -750,6 +750,8 @@ rb_gc_impl_writebarrier(void *objspace_ptr, VALUE a, VALUE b) { struct MMTk_ractor_cache *cache = rb_gc_get_ractor_newobj_cache(); + if (SPECIAL_CONST_P(b)) return; + mmtk_object_reference_write_post(cache->mutator, (MMTk_ObjectReference)a); } |