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 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 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); }