summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Marko <vmarko@google.com>2014-10-13 22:09:51 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-10-13 22:09:51 +0000
commit61357e47ca5381621d73abf3d5683cfd6af4fa78 (patch)
tree1605cf8308ccf864040e1727fda3de6c12bf5ea9
parentcc4f8f96227b7d2065103ab775e7e7c9a762e624 (diff)
parentc39eb4aef19b7fe64283fb3ae7ce6d13cd6c8294 (diff)
downloadart-61357e47ca5381621d73abf3d5683cfd6af4fa78.tar.gz
art-61357e47ca5381621d73abf3d5683cfd6af4fa78.tar.bz2
art-61357e47ca5381621d73abf3d5683cfd6af4fa78.zip
am c39eb4ae: Merge "Add regression test for null check elimination."
* commit 'c39eb4aef19b7fe64283fb3ae7ce6d13cd6c8294': Add regression test for null check elimination.
-rw-r--r--compiler/dex/mir_optimization.cc2
-rw-r--r--test/083-compiler-regressions/expected.txt1
-rw-r--r--test/083-compiler-regressions/src/Main.java19
3 files changed, 22 insertions, 0 deletions
diff --git a/compiler/dex/mir_optimization.cc b/compiler/dex/mir_optimization.cc
index 2ac0b51a89..84c056daf3 100644
--- a/compiler/dex/mir_optimization.cc
+++ b/compiler/dex/mir_optimization.cc
@@ -929,6 +929,8 @@ bool MIRGraph::EliminateNullChecks(BasicBlock* bb) {
mir->optimization_flags |= MIR_IGNORE_NULL_CHECK;
} else {
// Do the null check.
+ // TODO: Rewrite the pass to converge first before doing any modifications so that
+ // we don't lose the MIR_IGNORE_NULL_CHECK here if previously set by some other pass.
mir->optimization_flags &= ~MIR_IGNORE_NULL_CHECK;
// Mark s_reg as null-checked
ssa_regs_to_check->ClearBit(src_sreg);
diff --git a/test/083-compiler-regressions/expected.txt b/test/083-compiler-regressions/expected.txt
index 5251c17335..51bf8471c5 100644
--- a/test/083-compiler-regressions/expected.txt
+++ b/test/083-compiler-regressions/expected.txt
@@ -17,6 +17,7 @@ false
b13679511Test finishing
b16177324TestWrapper caught NPE as expected.
b16230771TestWrapper caught NPE as expected.
+b17969907TestWrapper caught NPE as expected.
largeFrame passes
largeFrameFloat passes
mulBy1Test passes
diff --git a/test/083-compiler-regressions/src/Main.java b/test/083-compiler-regressions/src/Main.java
index 8010711725..9ad8ea7b1b 100644
--- a/test/083-compiler-regressions/src/Main.java
+++ b/test/083-compiler-regressions/src/Main.java
@@ -39,6 +39,7 @@ public class Main {
b13679511Test();
b16177324TestWrapper();
b16230771TestWrapper();
+ b17969907TestWrapper();
largeFrameTest();
largeFrameTestFloat();
mulBy1Test();
@@ -990,6 +991,24 @@ public class Main {
}
}
+ static void b17969907TestWrapper() {
+ try {
+ b17969907Test();
+ System.out.println("b17969907Test unexpectedly didn't throw NPE.");
+ } catch (NullPointerException expected) {
+ System.out.println("b17969907TestWrapper caught NPE as expected.");
+ }
+ }
+
+ public static void b17969907Test() {
+ Integer i = new Integer(1);
+ int sum = 0;
+ while (sum < 100) {
+ sum += i;
+ i = null;
+ }
+ }
+
static double TooManyArgs(
long l00,
long l01,