Version 2.1.85

This version fixes a problem in the conflict resolution from cherry-picking 14522eddb6c5f8812efed66840ddce3b098f9e60 in 2.1.84.

Bug: 174167294
Change-Id: Ibb433f86284b2ef284eaab74edfcd506f5b4f314
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index 01a397b..02b8026 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 = "2.1.84";
+  public static final String LABEL = "2.1.85";
 
   private Version() {
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java b/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java
index b4ceb0d..e7b3924 100644
--- a/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java
+++ b/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java
@@ -331,7 +331,8 @@
   }
 
   @Override
-  public BasicBlock split(IRCode code, ListIterator<BasicBlock> blocksIterator) {
+  public BasicBlock split(
+      IRCode code, ListIterator<BasicBlock> blocksIterator, boolean keepCatchHandlers) {
     List<BasicBlock> blocks = code.blocks;
     assert blocksIterator == null || IteratorUtils.peekPrevious(blocksIterator) == block;
 
@@ -346,7 +347,6 @@
 
     // Prepare the new block, placing the exception handlers on the block with the throwing
     // instruction.
-    boolean keepCatchHandlers = hasPrevious() && peekPrevious().instructionTypeCanThrow();
     newBlock = block.createSplitBlock(blockNumber, keepCatchHandlers);
 
     // Add a goto instruction.
diff --git a/src/main/java/com/android/tools/r8/ir/code/IRCodeInstructionListIterator.java b/src/main/java/com/android/tools/r8/ir/code/IRCodeInstructionListIterator.java
index b4860aa..47ce330 100644
--- a/src/main/java/com/android/tools/r8/ir/code/IRCodeInstructionListIterator.java
+++ b/src/main/java/com/android/tools/r8/ir/code/IRCodeInstructionListIterator.java
@@ -68,7 +68,8 @@
   }
 
   @Override
-  public BasicBlock split(IRCode code, ListIterator<BasicBlock> blockIterator) {
+  public BasicBlock split(
+      IRCode code, ListIterator<BasicBlock> blockIterator, boolean keepCatchHandlers) {
     throw new Unimplemented();
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/code/InstructionListIterator.java b/src/main/java/com/android/tools/r8/ir/code/InstructionListIterator.java
index a546ee3..b15b08c 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InstructionListIterator.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InstructionListIterator.java
@@ -104,20 +104,25 @@
 
   /**
    * Split the block into two blocks at the point of the {@link ListIterator} cursor. The existing
-   * block will have all the instructions before the cursor, and the new block all the
-   * instructions after the cursor.
+   * block will have all the instructions before the cursor, and the new block all the instructions
+   * after the cursor.
    *
-   * If the current block has catch handlers these catch handlers will be attached to the block
+   * <p>If the current block has catch handlers these catch handlers will be attached to the block
    * containing the throwing instruction after the split.
    *
    * @param code the IR code for the block this iterator originates from.
    * @param blockIterator basic block iterator used to iterate the blocks. This must be positioned
-   * just after the block for which this is the instruction iterator. After this method returns it
-   * will be positioned just after the basic block returned. Calling {@link #remove} without
-   * further navigation will remove that block.
+   *     just after the block for which this is the instruction iterator. After this method returns
+   *     it will be positioned just after the basic block returned. Calling {@link #remove} without
+   *     further navigation will remove that block.
+   * @param keepCatchHandlers
    * @return Returns the new block with the instructions after the cursor.
    */
-  BasicBlock split(IRCode code, ListIterator<BasicBlock> blockIterator);
+  BasicBlock split(IRCode code, ListIterator<BasicBlock> blockIterator, boolean keepCatchHandlers);
+
+  default BasicBlock split(IRCode code, ListIterator<BasicBlock> blockIterator) {
+    return split(code, blockIterator, hasPrevious() && peekPrevious().instructionTypeCanThrow());
+  }
 
   default BasicBlock split(IRCode code) {
     return split(code, null);
diff --git a/src/main/java/com/android/tools/r8/ir/code/LinearFlowInstructionListIterator.java b/src/main/java/com/android/tools/r8/ir/code/LinearFlowInstructionListIterator.java
index d73f8df..5b230bc 100644
--- a/src/main/java/com/android/tools/r8/ir/code/LinearFlowInstructionListIterator.java
+++ b/src/main/java/com/android/tools/r8/ir/code/LinearFlowInstructionListIterator.java
@@ -77,7 +77,8 @@
   }
 
   @Override
-  public BasicBlock split(IRCode code, ListIterator<BasicBlock> blockIterator) {
+  public BasicBlock split(
+      IRCode code, ListIterator<BasicBlock> blockIterator, boolean keepCatchHandlers) {
     return currentBlockIterator.split(code, blockIterator);
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java b/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
index 3e1f768..4bd9f0d 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
@@ -312,11 +312,11 @@
         // Insert the definition of the replacement.
         replacement.setPosition(position);
         if (block.hasCatchHandlers()) {
-          BasicBlock splitBlock = iterator.split(code, blocks);
+          BasicBlock splitBlock = iterator.split(code, blocks, false);
           splitBlock.listIterator(code).add(replacement);
-          assert block.hasCatchHandlers();
-          assert !splitBlock.hasCatchHandlers();
-          splitBlock.copyCatchHandlers(code, blocks, block, appView.options());
+          assert !block.hasCatchHandlers();
+          assert splitBlock.hasCatchHandlers();
+          block.copyCatchHandlers(code, blocks, splitBlock, appView.options());
         } else {
           iterator.add(replacement);
         }
@@ -416,11 +416,11 @@
         // Insert the definition of the replacement.
         replacement.setPosition(position);
         if (block.hasCatchHandlers()) {
-          BasicBlock splitBlock = iterator.split(code, blocks);
+          BasicBlock splitBlock = iterator.split(code, blocks, false);
           splitBlock.listIterator(code).add(replacement);
-          assert block.hasCatchHandlers();
-          assert !splitBlock.hasCatchHandlers();
-          splitBlock.copyCatchHandlers(code, blocks, block, appView.options());
+          assert !block.hasCatchHandlers();
+          assert splitBlock.hasCatchHandlers();
+          block.copyCatchHandlers(code, blocks, splitBlock, appView.options());
         } else {
           iterator.add(replacement);
         }
diff --git a/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java b/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java
index 8ea5334..b4d2c3a 100644
--- a/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java
@@ -132,7 +132,8 @@
     }
 
     @Override
-    public BasicBlock split(IRCode code, ListIterator<BasicBlock> blockIterator) {
+    public BasicBlock split(
+        IRCode code, ListIterator<BasicBlock> blockIterator, boolean keepCatchHandlers) {
       throw new Unimplemented();
     }