Add more debug logging to VerifyNoMissingCardMarkVisitor::CheckReference.
Test: art/test.py
Bug: 113858074
Change-Id: I46a969a4e4f536e3a8925f6ed4bc7eebee6b458d
diff --git a/runtime/gc/collector/concurrent_copying.cc b/runtime/gc/collector/concurrent_copying.cc
index 3ac2486..3a80008 100644
--- a/runtime/gc/collector/concurrent_copying.cc
+++ b/runtime/gc/collector/concurrent_copying.cc
@@ -643,9 +643,16 @@
void CheckReference(mirror::Object* ref, int32_t offset = -1) const
REQUIRES_SHARED(Locks::mutator_lock_) {
- CHECK(ref == nullptr || !cc_->region_space_->IsInNewlyAllocatedRegion(ref))
+ if (ref != nullptr && cc_->region_space_->IsInNewlyAllocatedRegion(ref)) {
+ LOG(FATAL_WITHOUT_ABORT)
<< holder_->PrettyTypeOf() << "(" << holder_.Ptr() << ") references object "
<< ref->PrettyTypeOf() << "(" << ref << ") in newly allocated region at offset=" << offset;
+ LOG(FATAL_WITHOUT_ABORT) << "time=" << cc_->region_space_->Time();
+ constexpr const char* kIndent = " ";
+ LOG(FATAL_WITHOUT_ABORT) << cc_->DumpReferenceInfo(holder_.Ptr(), "holder_", kIndent);
+ LOG(FATAL_WITHOUT_ABORT) << cc_->DumpReferenceInfo(ref, "ref", kIndent);
+ LOG(FATAL) << "Unexpected reference to newly allocated region.";
+ }
}
private: