From 9651d9b4ce938e49788e83d38d410eccee54ac90 Mon Sep 17 00:00:00 2001 From: Jeff Hao Date: Wed, 29 Apr 2015 15:58:17 -0700 Subject: [PATCH] Restore interpreter check during DoCall removed by string init. Also reorder test in verifier to check for string_init first. Change-Id: I585ef3f5890819a3e233236ea85b51a03918f5dc --- runtime/interpreter/interpreter_common.cc | 1 + runtime/verifier/register_line.cc | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/runtime/interpreter/interpreter_common.cc b/runtime/interpreter/interpreter_common.cc index ef3c6e280..ae67efbcd 100644 --- a/runtime/interpreter/interpreter_common.cc +++ b/runtime/interpreter/interpreter_common.cc @@ -501,6 +501,7 @@ bool DoCall(ArtMethod* called_method, Thread* self, ShadowFrame& shadow_frame, uint16_t num_regs; if (LIKELY(code_item != nullptr)) { num_regs = code_item->registers_size_; + DCHECK_EQ(string_init ? num_ins - 1 : num_ins, code_item->ins_size_); } else { DCHECK(called_method->IsNative() || called_method->IsProxyMethod()); num_regs = num_ins; diff --git a/runtime/verifier/register_line.cc b/runtime/verifier/register_line.cc index 8445751e7..2838681f4 100644 --- a/runtime/verifier/register_line.cc +++ b/runtime/verifier/register_line.cc @@ -137,7 +137,7 @@ void RegisterLine::MarkRefsAsInitialized(MethodVerifier* verifier, const RegType if (GetRegisterType(verifier, i).Equals(uninit_type)) { line_[i] = init_type.GetId(); changed++; - if (i != this_reg && is_string) { + if (is_string && i != this_reg) { auto it = verifier->GetStringInitPcRegMap().find(dex_pc); if (it != verifier->GetStringInitPcRegMap().end()) { it->second.insert(i); -- 2.11.0