summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMingyao Yang <mingyao@google.com>2015-04-01 22:08:37 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-04-01 22:08:37 +0000
commit79bdb47d8c87ca3ee7da4aa2ca56105728257a32 (patch)
treea288ba00f919fc8687dc8bfba8708756be18ab97
parentd11fa65a21fd38dcd6e183cd9993b78d711b9ccf (diff)
parent0c365e674545159fd77b998081207f0685a605e5 (diff)
downloadart-79bdb47d8c87ca3ee7da4aa2ca56105728257a32.zip
art-79bdb47d8c87ca3ee7da4aa2ca56105728257a32.tar.gz
art-79bdb47d8c87ca3ee7da4aa2ca56105728257a32.tar.bz2
Merge "CanThrow() of HNewArray should return true."
-rw-r--r--compiler/optimizing/nodes.h3
-rw-r--r--test/412-new-array/src/Main.java16
2 files changed, 19 insertions, 0 deletions
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");