diff options
| -rw-r--r-- | compiler/optimizing/intrinsics_arm64.cc | 2 | ||||
| -rw-r--r-- | test/712-varhandle-invocations/src/VarHandleBadCoordinateTests.java | 5 |
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) { |