Reference::GetReferent() calls by GC should not trigger read barriers.
Otherwise, GC's reference processing would turn all referents alive
via read barriers, which is incorrect.
Bug: 12687968
Change-Id: I1463365981d55fa74a7bb207dd4a16aeec007f8b
diff --git a/runtime/gc/reference_processor.cc b/runtime/gc/reference_processor.cc
index 188b6b3..c37f516 100644
--- a/runtime/gc/reference_processor.cc
+++ b/runtime/gc/reference_processor.cc
@@ -172,7 +172,7 @@
IsMarkedCallback is_marked_callback, void* arg) {
// klass can be the class of the old object if the visitor already updated the class of ref.
DCHECK(klass->IsReferenceClass());
- mirror::Object* referent = ref->GetReferent();
+ mirror::Object* referent = ref->GetReferent<kWithoutReadBarrier>();
if (referent != nullptr) {
mirror::Object* forward_address = is_marked_callback(referent, arg);
// Null means that the object is not currently marked.
@@ -219,4 +219,3 @@
} // namespace gc
} // namespace art
-