From 822e341d76fef6a1b1f284b7c1ea8ce8ad14eba1 Mon Sep 17 00:00:00 2001 From: Alexander Shabalin Date: Tue, 27 Sep 2022 09:08:29 +0000 Subject: [PATCH] [K/N] Remove marker check from mark phase ^KT-54163 Markers can't appear in object fields. Merge-request: KT-MR-7201 Merged-by: Alexander Shabalin --- .../runtime/src/gc/common/cpp/MarkAndSweepUtils.hpp | 9 ++++----- .../src/gc/common/cpp/MarkAndSweepUtilsMarkTest.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 9 deletions(-) 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);