diff --git a/kotlin-native/runtime/src/gc/common/cpp/MarkAndSweepUtils.hpp b/kotlin-native/runtime/src/gc/common/cpp/MarkAndSweepUtils.hpp index 8ae61d9d173..be69191a189 100644 --- a/kotlin-native/runtime/src/gc/common/cpp/MarkAndSweepUtils.hpp +++ b/kotlin-native/runtime/src/gc/common/cpp/MarkAndSweepUtils.hpp @@ -52,14 +52,13 @@ MarkStats Mark(typename Traits::MarkQueue& markQueue) noexcept { stats.aliveHeapSetBytes += mm::GetAllocatedHeapSize(top); traverseReferredObjects(top, [&](ObjHeader* field) noexcept { - if (!isNullOrMarker(field) && field->heap()) { + if (field->heap()) { Traits::enqueue(markQueue, field); } }); if (auto* extraObjectData = mm::ExtraObjectData::Get(top)) { - auto weakCounter = extraObjectData->GetWeakReferenceCounter(); - if (!isNullOrMarker(weakCounter)) { + if (auto weakCounter = extraObjectData->GetWeakReferenceCounter()) { RuntimeAssert( weakCounter->heap(), "Weak counter must be a heap object. object=%p counter=%p permanent=%d local=%d", top, weakCounter, weakCounter->permanent(), weakCounter->local()); @@ -133,7 +132,7 @@ void collectRootSetForThread(typename Traits::MarkQueue& markQueue, mm::ThreadDa } else { traverseReferredObjects(object, [&](ObjHeader* field) noexcept { // Each permanent and stack object has own entry in the root set. - if (field->heap() && !isNullOrMarker(field)) { + if (field->heap()) { Traits::enqueue(markQueue, field); } }); @@ -165,7 +164,7 @@ void collectRootSetGlobals(typename Traits::MarkQueue& markQueue) noexcept { } else { traverseReferredObjects(object, [&](ObjHeader* field) noexcept { // Each permanent and stack object has own entry in the root set. - if (field->heap() && !isNullOrMarker(field)) { + if (field->heap()) { Traits::enqueue(markQueue, field); } }); diff --git a/kotlin-native/runtime/src/gc/common/cpp/MarkAndSweepUtilsMarkTest.cpp b/kotlin-native/runtime/src/gc/common/cpp/MarkAndSweepUtilsMarkTest.cpp index c0bdb0e2ed1..d955e6dae9a 100644 --- a/kotlin-native/runtime/src/gc/common/cpp/MarkAndSweepUtilsMarkTest.cpp +++ b/kotlin-native/runtime/src/gc/common/cpp/MarkAndSweepUtilsMarkTest.cpp @@ -227,7 +227,7 @@ TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleCharArray) { TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleObjectWithInvalidFields) { Object object; - object->field1 = kInitializingSingleton; + object->field1 = nullptr; auto stats = Mark({object}); @@ -236,7 +236,7 @@ TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleObjectWithInvalidFields) { TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleObjectArrayWithInvalidFields) { ObjectArray array; - array.elements()[0] = kInitializingSingleton; + array.elements()[0] = nullptr; auto stats = Mark({array}); @@ -317,7 +317,7 @@ TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleCharArrayWithWeakCounter) { TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleObjectWithInvalidFieldsWithWeakCounter) { Object weakCounter; Object object; - object->field1 = kInitializingSingleton; + object->field1 = nullptr; weakCounter->field1 = object.header(); object.InstallWeakCounter(weakCounter); @@ -329,7 +329,7 @@ TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleObjectWithInvalidFieldsWithWeakCount TEST_F(MarkAndSweepUtilsMarkTest, MarkSingleObjectArrayWithInvalidFieldsWithWeakCounter) { Object weakCounter; ObjectArray array; - array.elements()[0] = kInitializingSingleton; + array.elements()[0] = nullptr; weakCounter->field1 = array.header(); array.InstallWeakCounter(weakCounter);