diff options
Diffstat (limited to 'runtime/quick_exception_handler.cc')
-rw-r--r-- | runtime/quick_exception_handler.cc | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/runtime/quick_exception_handler.cc b/runtime/quick_exception_handler.cc index 90732e1cca..5f497af46a 100644 --- a/runtime/quick_exception_handler.cc +++ b/runtime/quick_exception_handler.cc @@ -15,10 +15,12 @@ */ #include "quick_exception_handler.h" +#include <ios> #include "arch/context.h" #include "art_method-inl.h" #include "base/enums.h" +#include "base/globals.h" #include "base/logging.h" // For VLOG_IS_ON. #include "base/systrace.h" #include "dex/dex_file_types.h" @@ -465,7 +467,12 @@ class DeoptimizeStackVisitor final : public StackVisitor { ? code_info.GetInlineDexRegisterMapOf(stack_map, GetCurrentInlinedFrame()) : code_info.GetDexRegisterMapOf(stack_map); - DCHECK_EQ(vreg_map.size(), number_of_vregs); + if (kIsDebugBuild || UNLIKELY(Runtime::Current()->IsJavaDebuggable())) { + CHECK_EQ(vreg_map.size(), number_of_vregs) << *Thread::Current() + << "Deopting: " << m->PrettyMethod() + << " inlined? " + << std::boolalpha << IsInInlinedFrame(); + } if (vreg_map.empty()) { return; } @@ -497,7 +504,7 @@ class DeoptimizeStackVisitor final : public StackVisitor { case DexRegisterLocation::Kind::kInFpuRegister: case DexRegisterLocation::Kind::kInFpuRegisterHigh: { uint32_t reg = vreg_map[vreg].GetMachineRegister(); - bool result = GetRegisterIfAccessible(reg, ToVRegKind(location), &value); + bool result = GetRegisterIfAccessible(reg, location, &value); CHECK(result); if (location == DexRegisterLocation::Kind::kInRegister) { if (((1u << reg) & register_mask) != 0) { |