diff options
| author | 2015-04-29 23:15:14 +0000 | |
|---|---|---|
| committer | 2015-04-29 23:15:14 +0000 | |
| commit | 0e95910ccac86c5464725c6e34d920598e42f89e (patch) | |
| tree | b1c05e7fa4ce6fb4787824b92da28ba2a3a6fc9d | |
| parent | 8df0e08ff050bbcb84d711d155d8e3503ae23658 (diff) | |
| parent | eff3229ff3c8faead4b6d400e273ee27b7004dab (diff) | |
am eff3229f: Merge "Restore interpreter check during DoCall removed by string init."
* commit 'eff3229ff3c8faead4b6d400e273ee27b7004dab':
Restore interpreter check during DoCall removed by string init.
| -rw-r--r-- | runtime/interpreter/interpreter_common.cc | 1 | ||||
| -rw-r--r-- | runtime/verifier/register_line.cc | 2 |
2 files changed, 2 insertions, 1 deletions
diff --git a/runtime/interpreter/interpreter_common.cc b/runtime/interpreter/interpreter_common.cc index ef3c6e2809..ae67efbcd1 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 8445751e77..2838681f4f 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); |