Fix Reference.refersTo() intrinsic for heap poisoning.
Test: ART_HEAP_POISONING=true m test-art-host-gtest
Test: ART_HEAP_POISONING=true testrunner.py --host --optimizing
Test: run-gtests.sh # with ART_HEAP_POISONING=true
Test: testrunner.py --target --optimizing # with ART_HEAP_POISONING=true
Bug: 172573708
Change-Id: I2e09b49813bdad40c1e18bf5681ba2094c5a40c1
diff --git a/compiler/optimizing/intrinsics_arm_vixl.cc b/compiler/optimizing/intrinsics_arm_vixl.cc
index b652234..42156d4 100644
--- a/compiler/optimizing/intrinsics_arm_vixl.cc
+++ b/compiler/optimizing/intrinsics_arm_vixl.cc
@@ -2584,6 +2584,7 @@
__ ldr(tmp, MemOperand(obj, referent_offset));
codegen_->MaybeRecordImplicitNullCheck(invoke);
}
+ assembler->MaybeUnpoisonHeapReference(tmp);
codegen_->GenerateMemoryBarrier(MemBarrierKind::kLoadAny); // `referent` is volatile.
if (kEmitCompilerReadBarrier) {