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",