CanThrow() of HNewArray should return true.

Change-Id: I9950f1c391dfeb26cf59cee769705d01d8e283d5
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 @@
   // 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 @@
     $opt$TestWithInitializations();
     $opt$TestNegativeValueNewByteArray();
     $opt$TestNegativeValueNewCharArray();
+    testNegativeArraySize();
     testSmaliFilledNewArray();
     testSmaliFillArrayData();
     testSmaliVerifyError();
@@ -129,6 +130,21 @@
     }
   }
 
+  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");