Trim the end of the last coalesced try-item.
R=ager
Bug: 65864735
Change-Id: I35a4ed1192e9c14f4db0e49ca5c16f479cdd005b
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
index 9c8ed1c..4d97764 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
@@ -633,8 +633,12 @@
// Coalesce try blocks.
tryItems.sort(TryItem::compareTo);
List<TryItem> coalescedTryItems = new ArrayList<>(tryItems.size());
+ TryItem item = null;
for (int i = 0; i < tryItems.size(); ) {
- TryItem item = tryItems.get(i);
+ if (item != null) {
+ item.end = trimEnd(blocksWithHandlers.get(i - 1));
+ }
+ item = tryItems.get(i);
coalescedTryItems.add(item);
// Trim the range start for non-throwing instructions when starting a new range.
List<com.android.tools.r8.ir.code.Instruction> instructions = blocksWithHandlers.get(i).getInstructions();
@@ -649,7 +653,6 @@
while (i < tryItems.size()) {
TryItem next = tryItems.get(i);
if (item.end != next.start || !item.handlers.equals(next.handlers)) {
- item.end = trimEnd(blocksWithHandlers.get(i - 1));
break;
}
item.end = next.end;
@@ -658,8 +661,7 @@
}
// Trim the last try range.
int lastIndex = tryItems.size() - 1;
- TryItem lastItem = tryItems.get(lastIndex);
- lastItem.end = trimEnd(blocksWithHandlers.get(lastIndex));
+ item.end = trimEnd(blocksWithHandlers.get(lastIndex));
return coalescedTryItems;
}