diff --git a/src/heap/cppgc-js/unified-heap-marking-state-inl.h b/src/heap/cppgc-js/unified-heap-marking-state-inl.h index 888bbd0c43..fd4d7cf97f 100644 --- a/src/heap/cppgc-js/unified-heap-marking-state-inl.h +++ b/src/heap/cppgc-js/unified-heap-marking-state-inl.h @@ -46,6 +46,7 @@ void UnifiedHeapMarkingState::MarkAndPush( return; } HeapObject heap_object = HeapObject::cast(object); + if (heap_object.InReadOnlySpace()) return; if (marking_state_->WhiteToGrey(heap_object)) { local_marking_worklist_->Push(heap_object); } diff --git a/src/heap/marking-barrier-inl.h b/src/heap/marking-barrier-inl.h index 37c31c515b..220a9a8aa8 100644 --- a/src/heap/marking-barrier-inl.h +++ b/src/heap/marking-barrier-inl.h @@ -72,6 +72,7 @@ void MarkingBarrier::MarkValueShared(HeapObject value) { } void MarkingBarrier::MarkValueLocal(HeapObject value) { + DCHECK(!value.InReadOnlySpace()); if (is_minor()) { // We do not need to insert into RememberedSet here because the // C++ marking barrier already does this for us. diff --git a/src/heap/marking-barrier.cc b/src/heap/marking-barrier.cc index 5a31efd1d1..9ce722b47a 100644 --- a/src/heap/marking-barrier.cc +++ b/src/heap/marking-barrier.cc @@ -60,7 +60,7 @@ void MarkingBarrier::WriteWithoutHost(HeapObject value) { return; } } - + if (value.InReadOnlySpace()) return; MarkValueLocal(value); }