summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Hao <jeffhao@google.com> 2015-04-29 23:15:14 +0000
committer Android Git Automerger <android-git-automerger@android.com> 2015-04-29 23:15:14 +0000
commit0e95910ccac86c5464725c6e34d920598e42f89e (patch)
treeb1c05e7fa4ce6fb4787824b92da28ba2a3a6fc9d
parent8df0e08ff050bbcb84d711d155d8e3503ae23658 (diff)
parenteff3229ff3c8faead4b6d400e273ee27b7004dab (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.cc1
-rw-r--r--runtime/verifier/register_line.cc2
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);