API change in StackVisitor::GetVReg*.
- Remove GetVReg() and SetVReg() that were expecting to always succeed.
- Change Quick-only methods to take a FromQuickCode suffix.
- Change deopt to use dead values when GetVReg does not succeed:
the optimizing compiler will not have a location for uninitialized
Dex registers and potentially dead registers.
Change-Id: Ida05773a97aff8aa69e0caf42ea961f80f854b77
diff --git a/runtime/monitor.cc b/runtime/monitor.cc
index d41d37e..1a80ded 100644
--- a/runtime/monitor.cc
+++ b/runtime/monitor.cc
@@ -1043,8 +1043,11 @@
}
uint16_t monitor_register = ((monitor_enter_instruction >> 8) & 0xff);
- mirror::Object* o = reinterpret_cast<mirror::Object*>(
- stack_visitor->GetVReg(m, monitor_register, kReferenceVReg));
+ uint32_t value;
+ bool success = stack_visitor->GetVReg(m, monitor_register, kReferenceVReg, &value);
+ CHECK(success) << "Failed to read v" << monitor_register << " of kind "
+ << kReferenceVReg << " in method " << PrettyMethod(m);
+ mirror::Object* o = reinterpret_cast<mirror::Object*>(value);
callback(o, callback_context);
}
}