From 7cd01f5d496c384874ea8c21eafb2b6479833e6a Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Mon, 13 Oct 2014 18:29:44 +0100 Subject: Add regression test for null check elimination. Prompted by https://android-review.googlesource.com/110090 Bug: 17969907 Change-Id: I938c27cda0681b9431d69baf4eafa7ca2f9b5c9c --- compiler/dex/mir_optimization.cc | 2 ++ test/083-compiler-regressions/expected.txt | 1 + test/083-compiler-regressions/src/Main.java | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+) 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, -- cgit v1.2.3