From 0c365e674545159fd77b998081207f0685a605e5 Mon Sep 17 00:00:00 2001 From: Mingyao Yang Date: Tue, 31 Mar 2015 15:09:29 -0700 Subject: CanThrow() of HNewArray should return true. Change-Id: I9950f1c391dfeb26cf59cee769705d01d8e283d5 --- compiler/optimizing/nodes.h | 3 +++ test/412-new-array/src/Main.java | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h index 21ed350..da1468e 100644 --- a/compiler/optimizing/nodes.h +++ b/compiler/optimizing/nodes.h @@ -2307,6 +2307,9 @@ class HNewArray : public HExpression<1> { // Calls runtime so needs an environment. bool NeedsEnvironment() const OVERRIDE { return true; } + // May throw NegativeArraySizeException, OutOfMemoryError, etc. + bool CanThrow() const OVERRIDE { return true; } + bool CanBeNull() const OVERRIDE { return false; } QuickEntrypointEnum GetEntrypoint() const { return entrypoint_; } diff --git a/test/412-new-array/src/Main.java b/test/412-new-array/src/Main.java index 168420c..e4669b8 100644 --- a/test/412-new-array/src/Main.java +++ b/test/412-new-array/src/Main.java @@ -26,6 +26,7 @@ public class Main extends TestCase { $opt$TestWithInitializations(); $opt$TestNegativeValueNewByteArray(); $opt$TestNegativeValueNewCharArray(); + testNegativeArraySize(); testSmaliFilledNewArray(); testSmaliFillArrayData(); testSmaliVerifyError(); @@ -129,6 +130,21 @@ public class Main extends TestCase { } } + static void testNegativeArraySize() { + int i = 0; + try { + $opt$TestNegativeArraySize(); + } catch (NegativeArraySizeException e) { + i = 1; + } + assertEquals(i, 1); + } + + static int[] $opt$TestNegativeArraySize() { + int[] array = new int[-1]; + return null; + } + public static void testSmaliFilledNewArray() throws Exception { Class c = Class.forName("FilledNewArray"); -- cgit v1.1