summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/optimizing/intrinsics_arm64.cc2
-rw-r--r--test/712-varhandle-invocations/src/VarHandleBadCoordinateTests.java5
2 files changed, 6 insertions, 1 deletions
diff --git a/compiler/optimizing/intrinsics_arm64.cc b/compiler/optimizing/intrinsics_arm64.cc
index fdb61a1ba1..9c98f8066b 100644
--- a/compiler/optimizing/intrinsics_arm64.cc
+++ b/compiler/optimizing/intrinsics_arm64.cc
@@ -3401,7 +3401,7 @@ void IntrinsicCodeGeneratorARM64::VisitVarHandleGet(HInvoke* invoke) {
// Check that the VarHandle references a static field by checking that coordinateType0 == null.
// Do not emit read barrier (or unpoison the reference) for comparing to null.
__ Ldr(temp, MemOperand(varhandle, mirror::VarHandle::CoordinateType0Offset().Int32Value()));
- __ Cbz(temp, slow_path->GetEntryLabel());
+ __ Cbnz(temp, slow_path->GetEntryLabel());
// Use `out` for offset if it is a core register.
Register offset = DataType::IsFloatingPointType(type)
diff --git a/test/712-varhandle-invocations/src/VarHandleBadCoordinateTests.java b/test/712-varhandle-invocations/src/VarHandleBadCoordinateTests.java
index 8f81c94a89..31a004e459 100644
--- a/test/712-varhandle-invocations/src/VarHandleBadCoordinateTests.java
+++ b/test/712-varhandle-invocations/src/VarHandleBadCoordinateTests.java
@@ -76,6 +76,11 @@ public class VarHandleBadCoordinateTests {
failUnreachable();
} catch (NullPointerException ex) {
}
+ try {
+ byte unused = (byte) vh.get();
+ failUnreachable();
+ } catch (WrongMethodTypeException ex) {
+ }
}
public static void main(String[] args) {