From e34d5cf32f86edb326dccd9809d02344f84d5304 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Thu, 8 Jan 2026 19:09:59 -0500 Subject: [PATCH 1/2] Add MMTK_ASSERT --- gc/mmtk/mmtk.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gc/mmtk/mmtk.c b/gc/mmtk/mmtk.c index 38e730a..7b70ddf 100644 --- a/gc/mmtk/mmtk.c +++ b/gc/mmtk/mmtk.c @@ -83,6 +83,12 @@ RB_THREAD_LOCAL_SPECIFIER VALUE marking_parent_object; # error We currently need language-supported TLS #endif +#ifdef MMTK_DEBUG +# define MMTK_ASSERT(expr, ...) RUBY_ASSERT_ALWAYS(expr, #expr RBIMPL_VA_OPT_ARGS(__VA_ARGS__)) +#else +# define MMTK_ASSERT(expr, ...) ((void)0) +#endif + #include static void From 59d27203e23c49e50565afe870c994f31e25fd38 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Thu, 8 Jan 2026 19:10:08 -0500 Subject: [PATCH 2/2] Assert that objects are not T_NONE in the write barrier --- gc/mmtk/mmtk.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gc/mmtk/mmtk.c b/gc/mmtk/mmtk.c index 7b70ddf..0321053 100644 --- a/gc/mmtk/mmtk.c +++ b/gc/mmtk/mmtk.c @@ -981,6 +981,9 @@ rb_gc_impl_writebarrier(void *objspace_ptr, VALUE a, VALUE b) } #endif + MMTK_ASSERT(BUILTIN_TYPE(a) != T_NONE); + MMTK_ASSERT(BUILTIN_TYPE(b) != T_NONE); + mmtk_object_reference_write_post(cache->mutator, (MMTk_ObjectReference)a); }