Skip to content

Commit 489a136

Browse files
authored
Merge pull request #62 from ruby/assert-wb-valid-objects
Check that a and b are valid objects in write barrier
2 parents 41a41d4 + 53610c2 commit 489a136

3 files changed

Lines changed: 17 additions & 1 deletion

File tree

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ jobs:
6767
if [[ ${{ matrix.gc.mmtk_build }} == debug ]]; then
6868
echo 'RUST_LOG=' >> $GITHUB_ENV
6969
echo 'RUBY_TEST_TIMEOUT_SCALE=20' >> $GITHUB_ENV
70-
echo 'SYNTAX_SUGGEST_TIMEOUT=60' >> $GITHUB_ENV
70+
echo 'SYNTAX_SUGGEST_TIMEOUT=120' >> $GITHUB_ENV
7171
fi
7272
echo "EXCLUDES=$PWD/test/.excludes-mmtk" >> $GITHUB_ENV
7373
echo "MSPECOPT=-B$PWD/spec/mmtk.mspec" >> $GITHUB_ENV

gc/mmtk/extconf.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
MMTK_BUILD = debug
1616
LIBMMTK_RUBY = libmmtk_ruby.#$LIBEXT
1717
RUSTSRCS = #{rustsrcs.join(" \\\n\t ")}
18+
19+
ifeq ($(MMTK_BUILD), debug)
20+
CPPFLAGS += -DMMTK_DEBUG
21+
endif
1822
MAKEFILE
1923
]
2024
end

gc/mmtk/mmtk.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -963,6 +963,18 @@ rb_gc_impl_writebarrier(void *objspace_ptr, VALUE a, VALUE b)
963963

964964
if (SPECIAL_CONST_P(b)) return;
965965

966+
#ifdef MMTK_DEBUG
967+
if (!rb_gc_impl_pointer_to_heap_p(objspace_ptr, (void *)a)) {
968+
char buff[256];
969+
rb_bug("a: %s is not an object", rb_raw_obj_info(buff, 256, a));
970+
}
971+
972+
if (!rb_gc_impl_pointer_to_heap_p(objspace_ptr, (void *)b)) {
973+
char buff[256];
974+
rb_bug("b: %s is not an object", rb_raw_obj_info(buff, 256, b));
975+
}
976+
#endif
977+
966978
mmtk_object_reference_write_post(cache->mutator, (MMTk_ObjectReference)a);
967979
}
968980

0 commit comments

Comments
 (0)