summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Marko <vmarko@google.com>2014-10-13 18:00:28 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-10-13 18:00:29 +0000
commitc39eb4aef19b7fe64283fb3ae7ce6d13cd6c8294 (patch)
tree14850b67072afaa67273c1e9e9b75e8c9c898421
parent72ab3cadce5002163783d7b76781b9f26413b773 (diff)
parent7cd01f5d496c384874ea8c21eafb2b6479833e6a (diff)
downloadart-c39eb4aef19b7fe64283fb3ae7ce6d13cd6c8294.tar.gz
art-c39eb4aef19b7fe64283fb3ae7ce6d13cd6c8294.tar.bz2
art-c39eb4aef19b7fe64283fb3ae7ce6d13cd6c8294.zip
Merge "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 e907fd1d58..c43d1f78cb 100644
--- a/test/083-compiler-regressions/expected.txt
+++ b/test/083-compiler-regressions/expected.txt
@@ -16,6 +16,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 8d7bf01192..9c772b9fb0 100644
--- a/test/083-compiler-regressions/src/Main.java
+++ b/test/083-compiler-regressions/src/Main.java
@@ -38,6 +38,7 @@ public class Main {
b13679511Test();
b16177324TestWrapper();
b16230771TestWrapper();
+ b17969907TestWrapper();
largeFrameTest();
largeFrameTestFloat();
mulBy1Test();
@@ -977,6 +978,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,