Version 1.2.39.

Merge: Reproduce b/112654039.
CL: https://r8-review.googlesource.com/c/r8/+/25200

Merge: Fix array index out of bounds when optimizing array construction.
CL: https://r8-review.googlesource.com/c/r8/+/25240

Merge: Add missing copyright header.
CL: https://r8-review.googlesource.com/c/r8/+/25243

R=jsjeon@google.com, zerny@google.com

Bug: 112654039
Change-Id: I40a12a44efe72d5565e40353e2cc2512efeeedfa
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index dfa80e1..10d19a5 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
 
   // This field is accessed from release scripts using simple pattern matching.
   // Therefore, changing this field could break our release scripts.
-  public static final String LABEL = "1.2.38";
+  public static final String LABEL = "1.2.39";
 
   private Version() {
   }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
index 672fb4f..408041e 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
@@ -1791,7 +1791,9 @@
           return null;
         }
         int index = arrayPut.index().getConstInstruction().asConstNumber().getIntValue();
-        assert index >= 0 && index < values.length;
+        if (index < 0 || index >= values.length) {
+          return null;
+        }
         if (values[index] != null) {
           return null;
         }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/B112654039.java b/src/test/java/com/android/tools/r8/ir/optimize/B112654039.java
new file mode 100644
index 0000000..c5e8321
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/ir/optimize/B112654039.java
@@ -0,0 +1,38 @@
+// Copyright (c) 2018 the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.ir.optimize;
+
+import static com.android.tools.r8.utils.DexInspectorMatchers.isPresent;
+import static org.junit.Assert.assertThat;
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.utils.AndroidApp;
+import com.android.tools.r8.utils.DexInspector;
+import com.android.tools.r8.utils.DexInspector.ClassSubject;
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class B112654039 extends TestBase {
+
+  @Test
+  public void test() throws Exception {
+    AndroidApp app = readClasses(TestClassForB112654039.class);
+    AndroidApp processedApp = ToolHelper.runD8(app, options -> {
+      // Pretend input .class does not have debugging info.
+      options.debug = false;
+    });
+    DexInspector inspector = new DexInspector(processedApp);
+    ClassSubject clazz = inspector.clazz(TestClassForB112654039.class);
+    assertThat(clazz, isPresent());
+  }
+}
+
+class TestClassForB112654039 {
+  void foo() {
+    double[] a = new double[1];
+    a[-1] = 1.0;
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/B87341268.java b/src/test/java/com/android/tools/r8/ir/optimize/B87341268.java
index 3f7bcfb..54fa78c 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/B87341268.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/B87341268.java
@@ -15,14 +15,14 @@
 public class B87341268 extends TestBase {
   @Test
   public void test() throws Exception {
-    AndroidApp app = compileWithD8(readClasses(TestClass.class));
+    AndroidApp app = compileWithD8(readClasses(TestClassForB87341268.class));
     DexInspector inspector = new DexInspector(app);
-    ClassSubject clazz = inspector.clazz(TestClass.class);
+    ClassSubject clazz = inspector.clazz(TestClassForB87341268.class);
     assertThat(clazz, isPresent());
   }
 }
 
-class TestClass {
+class TestClassForB87341268 {
   int loop(String arg) {
     long[] array = { 0L, 1L, 2L };
     int length = -1;