diff --git a/src/main/java/com/android/tools/r8/verticalclassmerging/InterfaceTypeToClassTypeLensCodeRewriterHelperImpl.java b/src/main/java/com/android/tools/r8/verticalclassmerging/InterfaceTypeToClassTypeLensCodeRewriterHelperImpl.java
index e97d8c5..bff70f5 100644
--- a/src/main/java/com/android/tools/r8/verticalclassmerging/InterfaceTypeToClassTypeLensCodeRewriterHelperImpl.java
+++ b/src/main/java/com/android/tools/r8/verticalclassmerging/InterfaceTypeToClassTypeLensCodeRewriterHelperImpl.java
@@ -163,8 +163,9 @@
                   operand, block, originalType, rewrittenType, isCodeFullyRewrittenWithLens);
           assert !needsCastForOperand.isUnknown();
           if (needsCastForOperand.isTrue()) {
-            insertCastForOperand(
-                operand, rewrittenType, instruction, blockIterator, block, instructionIterator);
+            instructionIterator =
+                insertCastForOperand(
+                    operand, rewrittenType, instruction, blockIterator, block, instructionIterator);
           }
         }
       }
@@ -181,7 +182,7 @@
         .addLast(new WorklistItem(operandIndex, originalType, rewrittenType));
   }
 
-  private void insertCastForOperand(
+  private InstructionListIterator insertCastForOperand(
       Value operand,
       DexType castType,
       Instruction rewrittenUser,
@@ -199,10 +200,11 @@
             .setPosition(rewrittenUser)
             .build();
     if (block.hasCatchHandlers()) {
-      instructionIterator
-          .splitCopyCatchHandlers(code, blockIterator, appView.options())
-          .listIterator(code)
-          .add(checkCast);
+      BasicBlock splitBlock =
+          instructionIterator.splitCopyCatchHandlers(code, blockIterator, appView.options());
+      instructionIterator.previous();
+      instructionIterator.add(checkCast);
+      instructionIterator = splitBlock.listIterator(code);
     } else {
       instructionIterator.add(checkCast);
     }
@@ -210,6 +212,7 @@
 
     Instruction next = instructionIterator.next();
     assert next == rewrittenUser;
+    return instructionIterator;
   }
 
   private boolean isOperandRewrittenWithLens(
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InterfaceInvokeWithObjectReceiverInliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InterfaceInvokeWithObjectReceiverInliningTest.java
index 8573c7b..cc1ded1 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InterfaceInvokeWithObjectReceiverInliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InterfaceInvokeWithObjectReceiverInliningTest.java
@@ -75,7 +75,7 @@
         .setMinApi(parameters.getApiLevel())
         .compile()
         .run(parameters.getRuntime(), Main.class)
-        .assertSuccessWithOutputLines("0");
+        .assertSuccessWithOutputLines("0", "0");
   }
 
   private static byte[] getTransformedMain() throws IOException {
@@ -98,6 +98,13 @@
     public static void main(String[] args) {
       // Transformed from `I get(int)` to `Object get(int)`.
       get(args.length).m();
+
+      // Transformed from `I get(int)` to `Object get(int)`.
+      try {
+        get(args.length).m();
+      } catch (Exception e) {
+        throw new RuntimeException();
+      }
     }
 
     // @Keep
