summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Hao <jeffhao@google.com> 2015-06-17 16:04:26 -0700
committer Jeff Hao <jeffhao@google.com> 2015-06-19 11:03:50 -0700
commitdde9827f75d1e1e9cd4b7e6b54086aec54f29b5f (patch)
tree06efa56d932dfdaab5ae27b020cdb7e292558dfe
parente102f1937ca14df87594469430d2e6e0ebe0f357 (diff)
Fix case where block has no predecessor for StringChange.
Removes part that checks for throwing half of instruction. It's no longer necessary. Also adds regression test. Bug: 21902684 (cherry-picked from commit 3e91a44bc9063f7f69b5415e3cf162991f73283f) Change-Id: I8d7308ff227816fb475341c2b74ed84d5695a2f5
-rw-r--r--compiler/dex/mir_optimization.cc8
-rw-r--r--test/800-smali/expected.txt1
-rw-r--r--test/800-smali/smali/b_21902684.smali17
-rw-r--r--test/800-smali/src/Main.java1
4 files changed, 20 insertions, 7 deletions
diff --git a/compiler/dex/mir_optimization.cc b/compiler/dex/mir_optimization.cc
index 727d0fd759..5bb0ce3ba5 100644
--- a/compiler/dex/mir_optimization.cc
+++ b/compiler/dex/mir_optimization.cc
@@ -1667,15 +1667,9 @@ void MIRGraph::StringChange() {
if (opcode == Instruction::NEW_INSTANCE) {
uint32_t type_idx = mir->dalvikInsn.vB;
if (cu_->compiler_driver->IsStringTypeIndex(type_idx, cu_->dex_file)) {
- // Change NEW_INSTANCE and throwing half of the insn (if it exists) into CONST_4 of 0
+ // Change NEW_INSTANCE into CONST_4 of 0
mir->dalvikInsn.opcode = Instruction::CONST_4;
mir->dalvikInsn.vB = 0;
- MIR* check_mir = GetBasicBlock(bb->predecessors[0])->last_mir_insn;
- if (check_mir != nullptr &&
- static_cast<int>(check_mir->dalvikInsn.opcode) == kMirOpCheck) {
- check_mir->dalvikInsn.opcode = static_cast<Instruction::Code>(kMirOpNop);
- check_mir->dalvikInsn.vB = 0;
- }
}
} else if ((opcode == Instruction::INVOKE_DIRECT) ||
(opcode == Instruction::INVOKE_DIRECT_RANGE)) {
diff --git a/test/800-smali/expected.txt b/test/800-smali/expected.txt
index 6c00c82983..c762603e57 100644
--- a/test/800-smali/expected.txt
+++ b/test/800-smali/expected.txt
@@ -20,4 +20,5 @@ b/17410612
b/21863767
b/21873167
b/21614284
+b/21902684
Done!
diff --git a/test/800-smali/smali/b_21902684.smali b/test/800-smali/smali/b_21902684.smali
new file mode 100644
index 0000000000..2d906b61bd
--- /dev/null
+++ b/test/800-smali/smali/b_21902684.smali
@@ -0,0 +1,17 @@
+.class public LB21902684;
+.super Ljava/lang/Object;
+
+.method public constructor <init>()V
+ .registers 1
+ invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+ return-void
+.end method
+
+.method public test()V
+ .registers 1
+ goto :end
+ new-instance v0, Ljava/lang/String;
+ invoke-direct {v0}, Ljava/lang/String;-><init>()V
+ :end
+ return-void
+.end method
diff --git a/test/800-smali/src/Main.java b/test/800-smali/src/Main.java
index ab4457e919..7280d45b86 100644
--- a/test/800-smali/src/Main.java
+++ b/test/800-smali/src/Main.java
@@ -88,6 +88,7 @@ public class Main {
testCases.add(new TestCase("b/21873167", "B21873167", "test", null, null, null));
testCases.add(new TestCase("b/21614284", "B21614284", "test", new Object[] { null },
new NullPointerException(), null));
+ testCases.add(new TestCase("b/21902684", "B21902684", "test", null, null, null));
}
public void runTests() {