Version 0.1.14.

Merge: Fix bug in shortening of live ranges.
CL: https://r8-review.googlesource.com/c/r8/+/6802

Change-Id: I3c283fed6937b47c416b5dbfbf885012d1890612
diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index 7c38555..7280fc3 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -55,7 +55,7 @@
  */
 public final class D8 {
 
-  private static final String VERSION = "v0.1.13";
+  private static final String VERSION = "v0.1.14";
   private static final int STATUS_ERROR = 1;
 
   private D8() {}
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index a2fcbf1..f723d7b 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -71,7 +71,7 @@
 
 public class R8 {
 
-  private static final String VERSION = "v0.1.13";
+  private static final String VERSION = "v0.1.14";
   private final Timing timing = new Timing("R8");
   private final InternalOptions options;
 
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 ff350a6..c0b5f44 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
@@ -966,11 +966,10 @@
     InstructionListIterator insertAt = block.listIterator();
     // Place the instruction as late in the block as we can. It needs to go before users
     // and if we have catch handlers it needs to be placed before the throwing instruction.
-    insertAt.nextUntil(i -> {
-      return i.inValues().contains(instruction.outValue())
-          || i.isJumpInstruction()
-          || (hasCatchHandlers && i.instructionInstanceCanThrow());
-    });
+    insertAt.nextUntil(i ->
+        i.inValues().contains(instruction.outValue())
+        || i.isJumpInstruction()
+        || (hasCatchHandlers && i.instructionTypeCanThrow()));
     insertAt.previous();
     insertAt.add(instruction);
   }
diff --git a/src/test/examples/regress_65104300/Regress.java b/src/test/examples/regress_65104300/Regress.java
new file mode 100644
index 0000000..05a4333
--- /dev/null
+++ b/src/test/examples/regress_65104300/Regress.java
@@ -0,0 +1,20 @@
+// Copyright (c) 2017, 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 regress_65104300;
+
+public class Regress {
+  // We correctly deduce that the array put cannot throw. However, we had a bug
+  // where we did not remove the handler but we allowed lowering the const 0 below
+  // the array put which makes it unavailable in the handler block.
+  public static void main(String[] args) {
+    Object[] objects = new Object[10];
+    Object o = new Object();
+    try {
+      objects[4] = o;
+      System.out.println(0);
+    } catch (Exception e) {
+      System.out.println(0);
+    }
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/R8RunExamplesTest.java b/src/test/java/com/android/tools/r8/R8RunExamplesTest.java
index 5e265aa..e8f1c86 100644
--- a/src/test/java/com/android/tools/r8/R8RunExamplesTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunExamplesTest.java
@@ -103,6 +103,7 @@
         "regress_37875803.Regress",
         "regress_37955340.Regress",
         "regress_62300145.Regress",
+        "regress_65104300.Regress",
         "memberrebinding2.Memberrebinding",
         "memberrebinding3.Memberrebinding",
         "minification.Minification",