From 12a3904b0406e693c3c2835b57c5b5b1b62b74be Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Mon, 5 Jan 2026 18:31:38 -0500 Subject: [PATCH 1/3] Set MMTK_DEBUG in C compiler for debug builds --- gc/mmtk/extconf.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gc/mmtk/extconf.rb b/gc/mmtk/extconf.rb index 5f42289..c0e7880 100644 --- a/gc/mmtk/extconf.rb +++ b/gc/mmtk/extconf.rb @@ -15,6 +15,10 @@ MMTK_BUILD = debug LIBMMTK_RUBY = libmmtk_ruby.#$LIBEXT RUSTSRCS = #{rustsrcs.join(" \\\n\t ")} + + ifeq ($(MMTK_BUILD), debug) + CPPFLAGS += -DMMTK_DEBUG + endif MAKEFILE ] end From 350625ebb3a90f9122ff55ce441916ae6b51dddf Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Mon, 5 Jan 2026 18:32:02 -0500 Subject: [PATCH 2/3] Check that a and b are valid objects in write barrier --- gc/mmtk/mmtk.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/gc/mmtk/mmtk.c b/gc/mmtk/mmtk.c index 042517e..38e730a 100644 --- a/gc/mmtk/mmtk.c +++ b/gc/mmtk/mmtk.c @@ -963,6 +963,18 @@ rb_gc_impl_writebarrier(void *objspace_ptr, VALUE a, VALUE b) if (SPECIAL_CONST_P(b)) return; +#ifdef MMTK_DEBUG + if (!rb_gc_impl_pointer_to_heap_p(objspace_ptr, (void *)a)) { + char buff[256]; + rb_bug("a: %s is not an object", rb_raw_obj_info(buff, 256, a)); + } + + if (!rb_gc_impl_pointer_to_heap_p(objspace_ptr, (void *)b)) { + char buff[256]; + rb_bug("b: %s is not an object", rb_raw_obj_info(buff, 256, b)); + } +#endif + mmtk_object_reference_write_post(cache->mutator, (MMTk_ObjectReference)a); } From 53610c2b7fb698f0d2a907a91987f3ba67d64518 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Tue, 6 Jan 2026 17:50:39 -0500 Subject: [PATCH 3/3] Increase SYNTAX_SUGGEST_TIMEOUT to 120s --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2c36fee..9ac0bb5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -67,7 +67,7 @@ jobs: if [[ ${{ matrix.gc.mmtk_build }} == debug ]]; then echo 'RUST_LOG=' >> $GITHUB_ENV echo 'RUBY_TEST_TIMEOUT_SCALE=20' >> $GITHUB_ENV - echo 'SYNTAX_SUGGEST_TIMEOUT=60' >> $GITHUB_ENV + echo 'SYNTAX_SUGGEST_TIMEOUT=120' >> $GITHUB_ENV fi echo "EXCLUDES=$PWD/test/.excludes-mmtk" >> $GITHUB_ENV echo "MSPECOPT=-B$PWD/spec/mmtk.mspec" >> $GITHUB_ENV