Version 1.0.30. Merge: Fix splitting for exception overlapping in release mode. CL: https://r8-review.googlesource.com/c/r8/+/21661 R=christofferqa@google.com, sgjesse@google.com Change-Id: I51dad0ea17559a9b231117646331eb905319a180
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java index 6b1ed51..fb1837e 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 = "v1.0.29"; + public static final String LABEL = "v1.0.30"; private Version() { }
diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java index c578041..2f55e7e 100644 --- a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java +++ b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
@@ -782,11 +782,8 @@ if (overlappingMoveExceptionIntervals) { for (LiveIntervals intervals : moveExceptionIntervals) { if (intervals.getUses().size() > 1) { - LiveIntervalsUse firstUse = intervals.getUses().pollFirst(); - LiveIntervalsUse secondUse = intervals.getUses().pollFirst(); - intervals.getUses().add(firstUse); - intervals.getUses().add(secondUse); - LiveIntervals split = intervals.splitBefore(secondUse.getPosition()); + LiveIntervals split = + intervals.splitBefore(intervals.getFirstUse() + INSTRUCTION_NUMBER_DELTA); unhandled.add(split); } }
diff --git a/src/test/examples/catchhandleroverlap/CatchHandlerOverlap.java b/src/test/examples/catchhandleroverlap/CatchHandlerOverlap.java new file mode 100644 index 0000000..7a4950c --- /dev/null +++ b/src/test/examples/catchhandleroverlap/CatchHandlerOverlap.java
@@ -0,0 +1,33 @@ +// 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 catchhandleroverlap; + +public class CatchHandlerOverlap { + private static void f() throws Exception { + throw new Exception("f"); + } + + private static void g() throws Exception { + throw new Exception("g"); + } + + private static void h(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, + int i10, int i11, int i12, int i13, int i14, int i15, int i16, int i17) { + System.out.println(i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10 + i11 + + i12 + i13 + i14 + i15 + i16 + i17); + try { + f(); + } catch (Exception e0) { + try { + g(); + } catch (Exception e1) { + System.out.println(e0.getMessage() + " " + e1.getMessage()); + } + } + } + + public static void main(String[] args) { + h(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17); + } +}
diff --git a/src/test/java/com/android/tools/r8/R8RunExamplesTest.java b/src/test/java/com/android/tools/r8/R8RunExamplesTest.java index d1bed68..0c64494 100644 --- a/src/test/java/com/android/tools/r8/R8RunExamplesTest.java +++ b/src/test/java/com/android/tools/r8/R8RunExamplesTest.java
@@ -31,6 +31,7 @@ "arrayaccess.ArrayAccess", "barray.BArray", "bridge.BridgeMethod", + "catchhandleroverlap.CatchHandlerOverlap", "cse.CommonSubexpressionElimination", "constants.Constants", "controlflow.ControlFlow",