Split block after implicit store via DebugLocalWrite.

Fixes: b/237567012
Change-Id: I6023e442a97838dfa816ad778b49a96d99b608ac
diff --git a/src/main/java/com/android/tools/r8/cf/LoadStoreHelper.java b/src/main/java/com/android/tools/r8/cf/LoadStoreHelper.java
index faf9046..f180e60 100644
--- a/src/main/java/com/android/tools/r8/cf/LoadStoreHelper.java
+++ b/src/main/java/com/android/tools/r8/cf/LoadStoreHelper.java
@@ -204,11 +204,17 @@
     }
     add(store, storeBlock, instruction.getPosition(), it);
     if (hasCatchHandlers && !instruction.instructionTypeCanThrow()) {
-      it.split(this.code, this.blockIterator);
-      this.blockIterator.previous();
+      splitAfterStoredOutValue(it);
     }
   }
 
+  // DebugLocalWrite encodes a store and it needs to consistently split out the catch range after
+  // its store.
+  public void splitAfterStoredOutValue(InstructionListIterator it) {
+    it.split(this.code, this.blockIterator);
+    this.blockIterator.previous();
+  }
+
   public void popOutType(DexType type, Instruction instruction, InstructionListIterator it) {
     popOutValue(createStackValue(type, 0), instruction, it);
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java b/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java
index ad9be48..b17536e 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java
@@ -65,6 +65,10 @@
   public void insertLoadAndStores(InstructionListIterator it, LoadStoreHelper helper) {
     helper.loadInValues(this, it);
     // A local-write does not have an outgoing stack value, but in writes directly to the local.
+    assert !instructionTypeCanThrow();
+    if (getBlock().hasCatchHandlers()) {
+      helper.splitAfterStoredOutValue(it);
+    }
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/cf/CfDebugLocalStackMapVerificationTest.java b/src/test/java/com/android/tools/r8/cf/CfDebugLocalStackMapVerificationTest.java
index 5108c8d..0f1668f 100644
--- a/src/test/java/com/android/tools/r8/cf/CfDebugLocalStackMapVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/cf/CfDebugLocalStackMapVerificationTest.java
@@ -5,10 +5,7 @@
 package com.android.tools.r8.cf;
 
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThrows;
 
-import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -18,12 +15,6 @@
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameter;
 import org.junit.runners.Parameterized.Parameters;
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
 
 /** Regression tests for b/237567012 */
 @RunWith(Parameterized.class)
@@ -59,7 +50,7 @@
   }
 
   @Test
-  public void testSmallReproD8() throws Exception {
+  public void testD8() throws Exception {
     testForD8(parameters.getBackend())
         .addProgramClasses(SmallRepro.class)
         .setMinApi(AndroidApiLevel.B)
@@ -69,967 +60,25 @@
               options.testing.neverReuseCfLocalRegisters = true;
             })
         .run(parameters.getRuntime(), SmallRepro.class)
-        // TODO(b/237567012): Run should succeed with printing of FOO.
-        .assertFailureWithErrorThatThrows(VerifyError.class);
+        .assertSuccessWithOutputThatMatches(containsString("FOO"));
   }
 
   @Test
   public void testR8() throws Exception {
-    // TODO(b/237567012): We should not fail compilation.
-    assertThrows(
-        CompilationFailedException.class,
-        () ->
-            testForR8(parameters.getBackend())
-                .addProgramClassFileData(CfDebugLocalStackMapVerificationTest$MainDump.dump())
-                .addKeepMainRule(Main.class)
-                .setMode(CompilationMode.DEBUG)
-                .addDontWarn("*")
-                // TODO(b/237567012): Remove option when resolved.
-                .addOptionsModification(
-                    options -> options.enableCheckAllInstructionsDuringStackMapVerification = true)
-                .compile()
-                .run(parameters.getRuntime(), Main.class));
-  }
-
-  public static class Main {
-
-    // InvokeSuspend is taken from an input program.jar and copied verbatim in the dump below.
-    public Object invokeSuspend(Object o) {
-      return o;
-    }
-
-    public static void main(String[] args) {
-      new Main().invokeSuspend(null);
-    }
-  }
-
-  public static class CfDebugLocalStackMapVerificationTest$MainDump implements Opcodes {
-
-    public static byte[] dump() throws Exception {
-
-      ClassWriter classWriter = new ClassWriter(0);
-      FieldVisitor fieldVisitor;
-      MethodVisitor methodVisitor;
-      AnnotationVisitor annotationVisitor0;
-
-      classWriter.visit(
-          V1_8,
-          ACC_FINAL | ACC_SUPER,
-          binaryName(Main.class),
-          null,
-          "kotlin/coroutines/jvm/internal/SuspendLambda",
-          new String[] {"kotlin/jvm/functions/Function2"});
-
-      {
-        fieldVisitor = classWriter.visitField(0, "L$1", "Ljava/lang/Object;", null, null);
-        fieldVisitor.visitEnd();
-      }
-      {
-        fieldVisitor = classWriter.visitField(0, "L$2", "Ljava/lang/Object;", null, null);
-        fieldVisitor.visitEnd();
-      }
-      {
-        fieldVisitor = classWriter.visitField(0, "label", "I", null, null);
-        fieldVisitor.visitEnd();
-      }
-      {
-        fieldVisitor =
-            classWriter.visitField(
-                ACC_PRIVATE | ACC_SYNTHETIC, "L$0", "Ljava/lang/Object;", null, null);
-        fieldVisitor.visitEnd();
-      }
-      {
-        fieldVisitor =
-            classWriter.visitField(
-                ACC_FINAL | ACC_SYNTHETIC,
-                "this$0",
-                "Lio/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber;",
-                null,
-                null);
-        fieldVisitor.visitEnd();
-      }
-      {
-        methodVisitor =
-            classWriter.visitMethod(
-                0,
-                "<init>",
-                "(Lio/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber;Lkotlin/coroutines/Continuation;)V",
-                "(Lio/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber;Lkotlin/coroutines/Continuation<-Lio/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1;>;)V",
-                null);
-        methodVisitor.visitCode();
-        Label label0 = new Label();
-        methodVisitor.visitLabel(label0);
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitVarInsn(ALOAD, 1);
-        methodVisitor.visitFieldInsn(
-            PUTFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "this$0",
-            "Lio/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber;");
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitInsn(ICONST_2);
-        methodVisitor.visitVarInsn(ALOAD, 2);
-        methodVisitor.visitMethodInsn(
-            INVOKESPECIAL,
-            "kotlin/coroutines/jvm/internal/SuspendLambda",
-            "<init>",
-            "(ILkotlin/coroutines/Continuation;)V",
-            false);
-        methodVisitor.visitInsn(RETURN);
-        Label label1 = new Label();
-        methodVisitor.visitLabel(label1);
-        methodVisitor.visitLocalVariable(
-            "this",
-            "Lio/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1;",
-            null,
-            label0,
-            label1,
-            0);
-        methodVisitor.visitLocalVariable(
-            "$receiver",
-            "Lio/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber;",
-            null,
-            label0,
-            label1,
-            1);
-        methodVisitor.visitLocalVariable(
-            "$completion", "Lkotlin/coroutines/Continuation;", null, label0, label1, 2);
-        methodVisitor.visitMaxs(3, 3);
-        methodVisitor.visitEnd();
-      }
-      {
-        methodVisitor =
-            classWriter.visitMethod(
-                ACC_PUBLIC | ACC_FINAL,
-                "invokeSuspend",
-                "(Ljava/lang/Object;)Ljava/lang/Object;",
-                null,
-                null);
-        {
-          annotationVisitor0 =
-              methodVisitor.visitAnnotation("Lorg/jetbrains/annotations/Nullable;", false);
-          annotationVisitor0.visitEnd();
-        }
-        methodVisitor.visitAnnotableParameterCount(1, false);
-        {
-          annotationVisitor0 =
-              methodVisitor.visitParameterAnnotation(
-                  0, "Lorg/jetbrains/annotations/NotNull;", false);
-          annotationVisitor0.visitEnd();
-        }
-        methodVisitor.visitCode();
-        Label label0 = new Label();
-        Label label1 = new Label();
-        Label label2 = new Label();
-        methodVisitor.visitTryCatchBlock(label0, label1, label2, "java/lang/Throwable");
-        Label label3 = new Label();
-        Label label4 = new Label();
-        methodVisitor.visitTryCatchBlock(label3, label4, label2, "java/lang/Throwable");
-        Label label5 = new Label();
-        Label label6 = new Label();
-        methodVisitor.visitTryCatchBlock(label5, label6, label2, "java/lang/Throwable");
-        Label label7 = new Label();
-        methodVisitor.visitTryCatchBlock(label0, label1, label7, null);
-        methodVisitor.visitTryCatchBlock(label3, label4, label7, null);
-        methodVisitor.visitTryCatchBlock(label5, label6, label7, null);
-        methodVisitor.visitTryCatchBlock(label2, label7, label7, null);
-        Label label8 = new Label();
-        methodVisitor.visitTryCatchBlock(label7, label8, label7, null);
-        Label label9 = new Label();
-        Label label10 = new Label();
-        methodVisitor.visitTryCatchBlock(
-            label9, label1, label10, "kotlinx/coroutines/channels/ClosedReceiveChannelException");
-        methodVisitor.visitTryCatchBlock(
-            label3, label4, label10, "kotlinx/coroutines/channels/ClosedReceiveChannelException");
-        methodVisitor.visitTryCatchBlock(
-            label5, label10, label10, "kotlinx/coroutines/channels/ClosedReceiveChannelException");
-        methodVisitor.visitMethodInsn(
-            INVOKESTATIC,
-            "kotlin/coroutines/intrinsics/IntrinsicsKt",
-            "getCOROUTINE_SUSPENDED",
-            "()Ljava/lang/Object;",
-            false);
-        Label label11 = new Label();
-        methodVisitor.visitLabel(label11);
-        methodVisitor.visitLineNumber(60, label11);
-        methodVisitor.visitVarInsn(ASTORE, 10);
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitFieldInsn(
-            GETFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "label",
-            "I");
-        Label label12 = new Label();
-        Label label13 = new Label();
-        Label label14 = new Label();
-        Label label15 = new Label();
-        methodVisitor.visitTableSwitchInsn(0, 2, label15, new Label[] {label12, label13, label14});
-        methodVisitor.visitLabel(label12);
-        methodVisitor.visitFrame(
-            Opcodes.F_FULL,
-            11,
-            new Object[] {
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-              "java/lang/Object",
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              "java/lang/Object"
-            },
-            0,
-            new Object[] {});
-        methodVisitor.visitVarInsn(ALOAD, 1);
-        methodVisitor.visitMethodInsn(
-            INVOKESTATIC, "kotlin/ResultKt", "throwOnFailure", "(Ljava/lang/Object;)V", false);
-        Label label16 = new Label();
-        methodVisitor.visitLabel(label16);
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitFieldInsn(
-            GETFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "L$0",
-            "Ljava/lang/Object;");
-        methodVisitor.visitTypeInsn(CHECKCAST, "kotlinx/coroutines/CoroutineScope");
-        methodVisitor.visitVarInsn(ASTORE, 2);
-        methodVisitor.visitLabel(label9);
-        methodVisitor.visitLineNumber(61, label9);
-        methodVisitor.visitInsn(NOP);
-        Label label17 = new Label();
-        methodVisitor.visitLabel(label17);
-        methodVisitor.visitLineNumber(62, label17);
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitFieldInsn(
-            GETFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "this$0",
-            "Lio/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber;");
-        methodVisitor.visitMethodInsn(
-            INVOKESTATIC,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber",
-            "access$getQueue$p",
-            "(Lio/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber;)Lkotlinx/coroutines/channels/Channel;",
-            false);
-        methodVisitor.visitTypeInsn(CHECKCAST, "kotlinx/coroutines/channels/ReceiveChannel");
-        methodVisitor.visitVarInsn(ASTORE, 3);
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitFieldInsn(
-            GETFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "this$0",
-            "Lio/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber;");
-        methodVisitor.visitVarInsn(ASTORE, 4);
-        Label label18 = new Label();
-        methodVisitor.visitLabel(label18);
-        methodVisitor.visitInsn(ICONST_0);
-        methodVisitor.visitVarInsn(ISTORE, 5);
-        Label label19 = new Label();
-        methodVisitor.visitLabel(label19);
-        methodVisitor.visitLineNumber(146, label19);
-        methodVisitor.visitInsn(NOP);
-        Label label20 = new Label();
-        methodVisitor.visitLabel(label20);
-        methodVisitor.visitLineNumber(149, label20);
-        methodVisitor.visitInsn(ACONST_NULL);
-        methodVisitor.visitVarInsn(ASTORE, 6);
-        methodVisitor.visitLabel(label0);
-        methodVisitor.visitLineNumber(150, label0);
-        methodVisitor.visitInsn(NOP);
-        Label label21 = new Label();
-        methodVisitor.visitLabel(label21);
-        methodVisitor.visitLineNumber(151, label21);
-        methodVisitor.visitInsn(ICONST_0);
-        methodVisitor.visitVarInsn(ISTORE, 7);
-        Label label22 = new Label();
-        methodVisitor.visitLabel(label22);
-        methodVisitor.visitLineNumber(63, label22);
-        methodVisitor.visitFrame(
-            Opcodes.F_FULL,
-            11,
-            new Object[] {
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-              "java/lang/Object",
-              "kotlinx/coroutines/CoroutineScope",
-              "kotlinx/coroutines/channels/ReceiveChannel",
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber",
-              Opcodes.INTEGER,
-              Opcodes.NULL,
-              Opcodes.INTEGER,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              "java/lang/Object"
-            },
-            0,
-            new Object[] {});
-        methodVisitor.visitVarInsn(ALOAD, 2);
-        methodVisitor.visitMethodInsn(
-            INVOKESTATIC,
-            "kotlinx/coroutines/CoroutineScopeKt",
-            "isActive",
-            "(Lkotlinx/coroutines/CoroutineScope;)Z",
-            false);
-        Label label23 = new Label();
-        methodVisitor.visitJumpInsn(IFEQ, label23);
-        Label label24 = new Label();
-        methodVisitor.visitLabel(label24);
-        methodVisitor.visitLineNumber(64, label24);
-        methodVisitor.visitVarInsn(ALOAD, 4);
-        methodVisitor.visitMethodInsn(
-            INVOKESTATIC,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber",
-            "access$getQueue$p",
-            "(Lio/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber;)Lkotlinx/coroutines/channels/Channel;",
-            false);
-        methodVisitor.visitMethodInsn(
-            INVOKEINTERFACE,
-            "kotlinx/coroutines/channels/Channel",
-            "tryReceive-PtdJZtk",
-            "()Ljava/lang/Object;",
-            true);
-        methodVisitor.visitMethodInsn(
-            INVOKESTATIC,
-            "kotlinx/coroutines/channels/ChannelResult",
-            "getOrNull-impl",
-            "(Ljava/lang/Object;)Ljava/lang/Object;",
-            false);
-        methodVisitor.visitTypeInsn(CHECKCAST, "java/nio/ByteBuffer");
-        methodVisitor.visitVarInsn(ASTORE, 8);
-        Label label25 = new Label();
-        methodVisitor.visitLabel(label25);
-        methodVisitor.visitLineNumber(65, label25);
-        methodVisitor.visitVarInsn(ALOAD, 8);
-        Label label26 = new Label();
-        methodVisitor.visitJumpInsn(IFNONNULL, label26);
-        Label label27 = new Label();
-        methodVisitor.visitLabel(label27);
-        methodVisitor.visitLineNumber(66, label27);
-        methodVisitor.visitVarInsn(ALOAD, 4);
-        methodVisitor.visitFieldInsn(
-            GETFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber",
-            "subscription",
-            "Ljava/lang/Object;");
-        methodVisitor.visitTypeInsn(CHECKCAST, "java/util/concurrent/Flow$Subscription");
-        methodVisitor.visitInsn(DUP);
-        Label label28 = new Label();
-        methodVisitor.visitJumpInsn(IFNULL, label28);
-        methodVisitor.visitInsn(LCONST_1);
-        methodVisitor.visitMethodInsn(
-            INVOKEINTERFACE, "java/util/concurrent/Flow$Subscription", "request", "(J)V", true);
-        Label label29 = new Label();
-        methodVisitor.visitJumpInsn(GOTO, label29);
-        methodVisitor.visitLabel(label28);
-        methodVisitor.visitFrame(
-            Opcodes.F_FULL,
-            11,
-            new Object[] {
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-              "java/lang/Object",
-              "kotlinx/coroutines/CoroutineScope",
-              "kotlinx/coroutines/channels/ReceiveChannel",
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber",
-              Opcodes.INTEGER,
-              Opcodes.NULL,
-              Opcodes.INTEGER,
-              "java/nio/ByteBuffer",
-              Opcodes.TOP,
-              "java/lang/Object"
-            },
-            1,
-            new Object[] {"java/util/concurrent/Flow$Subscription"});
-        methodVisitor.visitInsn(POP);
-        methodVisitor.visitLabel(label29);
-        methodVisitor.visitLineNumber(67, label29);
-        methodVisitor.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
-        methodVisitor.visitVarInsn(ALOAD, 4);
-        methodVisitor.visitMethodInsn(
-            INVOKESTATIC,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber",
-            "access$getQueue$p",
-            "(Lio/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber;)Lkotlinx/coroutines/channels/Channel;",
-            false);
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitVarInsn(ALOAD, 2);
-        methodVisitor.visitFieldInsn(
-            PUTFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "L$0",
-            "Ljava/lang/Object;");
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitVarInsn(ALOAD, 3);
-        methodVisitor.visitFieldInsn(
-            PUTFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "L$1",
-            "Ljava/lang/Object;");
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitVarInsn(ALOAD, 4);
-        methodVisitor.visitFieldInsn(
-            PUTFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "L$2",
-            "Ljava/lang/Object;");
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitInsn(ICONST_1);
-        methodVisitor.visitFieldInsn(
-            PUTFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "label",
-            "I");
-        methodVisitor.visitMethodInsn(
-            INVOKEINTERFACE,
-            "kotlinx/coroutines/channels/Channel",
-            "receive",
-            "(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;",
-            true);
-        methodVisitor.visitLabel(label1);
-        methodVisitor.visitInsn(DUP);
-        methodVisitor.visitVarInsn(ALOAD, 10);
-        Label label30 = new Label();
-        methodVisitor.visitJumpInsn(IF_ACMPNE, label30);
-        Label label31 = new Label();
-        methodVisitor.visitLabel(label31);
-        methodVisitor.visitLineNumber(60, label31);
-        methodVisitor.visitVarInsn(ALOAD, 10);
-        methodVisitor.visitInsn(ARETURN);
-        methodVisitor.visitLabel(label13);
-        methodVisitor.visitFrame(
-            Opcodes.F_FULL,
-            11,
-            new Object[] {
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-              "java/lang/Object",
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              "java/lang/Object"
-            },
-            0,
-            new Object[] {});
-        methodVisitor.visitInsn(ICONST_0);
-        methodVisitor.visitVarInsn(ISTORE, 5);
-        Label label32 = new Label();
-        methodVisitor.visitLabel(label32);
-        methodVisitor.visitInsn(ICONST_0);
-        methodVisitor.visitVarInsn(ISTORE, 7);
-        Label label33 = new Label();
-        methodVisitor.visitLabel(label33);
-        methodVisitor.visitInsn(ACONST_NULL);
-        methodVisitor.visitVarInsn(ASTORE, 6);
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitFieldInsn(
-            GETFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "L$2",
-            "Ljava/lang/Object;");
-        methodVisitor.visitTypeInsn(
-            CHECKCAST,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber");
-        methodVisitor.visitVarInsn(ASTORE, 4);
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitFieldInsn(
-            GETFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "L$1",
-            "Ljava/lang/Object;");
-        methodVisitor.visitTypeInsn(CHECKCAST, "kotlinx/coroutines/channels/ReceiveChannel");
-        methodVisitor.visitVarInsn(ASTORE, 3);
-        Label label34 = new Label();
-        methodVisitor.visitLabel(label34);
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitFieldInsn(
-            GETFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "L$0",
-            "Ljava/lang/Object;");
-        methodVisitor.visitTypeInsn(CHECKCAST, "kotlinx/coroutines/CoroutineScope");
-        methodVisitor.visitVarInsn(ASTORE, 2);
-        methodVisitor.visitLabel(label3);
-        methodVisitor.visitInsn(NOP);
-        methodVisitor.visitVarInsn(ALOAD, 1);
-        methodVisitor.visitMethodInsn(
-            INVOKESTATIC, "kotlin/ResultKt", "throwOnFailure", "(Ljava/lang/Object;)V", false);
-        methodVisitor.visitVarInsn(ALOAD, 1);
-        methodVisitor.visitLabel(label30);
-        methodVisitor.visitFrame(
-            Opcodes.F_FULL,
-            11,
-            new Object[] {
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-              "java/lang/Object",
-              "kotlinx/coroutines/CoroutineScope",
-              "kotlinx/coroutines/channels/ReceiveChannel",
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber",
-              Opcodes.INTEGER,
-              Opcodes.NULL,
-              Opcodes.INTEGER,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              "java/lang/Object"
-            },
-            1,
-            new Object[] {"java/lang/Object"});
-        methodVisitor.visitTypeInsn(CHECKCAST, "java/nio/ByteBuffer");
-        methodVisitor.visitVarInsn(ASTORE, 8);
-        methodVisitor.visitLabel(label26);
-        methodVisitor.visitLineNumber(70, label26);
-        methodVisitor.visitFrame(
-            Opcodes.F_FULL,
-            11,
-            new Object[] {
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-              "java/lang/Object",
-              "kotlinx/coroutines/CoroutineScope",
-              "kotlinx/coroutines/channels/ReceiveChannel",
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber",
-              Opcodes.INTEGER,
-              Opcodes.NULL,
-              Opcodes.INTEGER,
-              "java/nio/ByteBuffer",
-              Opcodes.TOP,
-              "java/lang/Object"
-            },
-            0,
-            new Object[] {});
-        methodVisitor.visitVarInsn(ALOAD, 4);
-        methodVisitor.visitMethodInsn(
-            INVOKESTATIC,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber",
-            "access$getResponseChannel$p",
-            "(Lio/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber;)Lio/ktor/utils/io/ByteChannel;",
-            false);
-        methodVisitor.visitVarInsn(ALOAD, 8);
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitVarInsn(ALOAD, 2);
-        methodVisitor.visitFieldInsn(
-            PUTFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "L$0",
-            "Ljava/lang/Object;");
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitVarInsn(ALOAD, 3);
-        methodVisitor.visitFieldInsn(
-            PUTFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "L$1",
-            "Ljava/lang/Object;");
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitVarInsn(ALOAD, 4);
-        methodVisitor.visitFieldInsn(
-            PUTFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "L$2",
-            "Ljava/lang/Object;");
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitInsn(ICONST_2);
-        methodVisitor.visitFieldInsn(
-            PUTFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "label",
-            "I");
-        methodVisitor.visitMethodInsn(
-            INVOKEINTERFACE,
-            "io/ktor/utils/io/ByteChannel",
-            "writeFully",
-            "(Ljava/nio/ByteBuffer;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;",
-            true);
-        methodVisitor.visitLabel(label4);
-        methodVisitor.visitInsn(DUP);
-        methodVisitor.visitVarInsn(ALOAD, 10);
-        Label label35 = new Label();
-        methodVisitor.visitJumpInsn(IF_ACMPNE, label35);
-        Label label36 = new Label();
-        methodVisitor.visitLabel(label36);
-        methodVisitor.visitLineNumber(60, label36);
-        methodVisitor.visitVarInsn(ALOAD, 10);
-        methodVisitor.visitInsn(ARETURN);
-        methodVisitor.visitLabel(label14);
-        methodVisitor.visitFrame(
-            Opcodes.F_FULL,
-            11,
-            new Object[] {
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-              "java/lang/Object",
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              "java/lang/Object"
-            },
-            0,
-            new Object[] {});
-        methodVisitor.visitInsn(ICONST_0);
-        methodVisitor.visitVarInsn(ISTORE, 5);
-        Label label37 = new Label();
-        methodVisitor.visitLabel(label37);
-        methodVisitor.visitInsn(ICONST_0);
-        methodVisitor.visitVarInsn(ISTORE, 7);
-        Label label38 = new Label();
-        methodVisitor.visitLabel(label38);
-        methodVisitor.visitInsn(ACONST_NULL);
-        methodVisitor.visitVarInsn(ASTORE, 6);
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitFieldInsn(
-            GETFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "L$2",
-            "Ljava/lang/Object;");
-        methodVisitor.visitTypeInsn(
-            CHECKCAST,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber");
-        methodVisitor.visitVarInsn(ASTORE, 4);
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitFieldInsn(
-            GETFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "L$1",
-            "Ljava/lang/Object;");
-        methodVisitor.visitTypeInsn(CHECKCAST, "kotlinx/coroutines/channels/ReceiveChannel");
-        methodVisitor.visitVarInsn(ASTORE, 3);
-        Label label39 = new Label();
-        methodVisitor.visitLabel(label39);
-        methodVisitor.visitVarInsn(ALOAD, 0);
-        methodVisitor.visitFieldInsn(
-            GETFIELD,
-            "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-            "L$0",
-            "Ljava/lang/Object;");
-        methodVisitor.visitTypeInsn(CHECKCAST, "kotlinx/coroutines/CoroutineScope");
-        methodVisitor.visitVarInsn(ASTORE, 2);
-        methodVisitor.visitLabel(label5);
-        methodVisitor.visitInsn(NOP);
-        methodVisitor.visitVarInsn(ALOAD, 1);
-        methodVisitor.visitMethodInsn(
-            INVOKESTATIC, "kotlin/ResultKt", "throwOnFailure", "(Ljava/lang/Object;)V", false);
-        methodVisitor.visitVarInsn(ALOAD, 1);
-        methodVisitor.visitLabel(label35);
-        methodVisitor.visitLineNumber(70, label35);
-        methodVisitor.visitFrame(
-            Opcodes.F_FULL,
-            11,
-            new Object[] {
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-              "java/lang/Object",
-              "kotlinx/coroutines/CoroutineScope",
-              "kotlinx/coroutines/channels/ReceiveChannel",
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber",
-              Opcodes.INTEGER,
-              Opcodes.NULL,
-              Opcodes.INTEGER,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              "java/lang/Object"
-            },
-            1,
-            new Object[] {"java/lang/Object"});
-        methodVisitor.visitInsn(POP);
-        methodVisitor.visitJumpInsn(GOTO, label22);
-        methodVisitor.visitLabel(label23);
-        methodVisitor.visitLineNumber(72, label23);
-        methodVisitor.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
-        methodVisitor.visitInsn(NOP);
-        Label label40 = new Label();
-        methodVisitor.visitLabel(label40);
-        methodVisitor.visitFieldInsn(GETSTATIC, "kotlin/Unit", "INSTANCE", "Lkotlin/Unit;");
-        methodVisitor.visitVarInsn(ASTORE, 9);
-        methodVisitor.visitLabel(label6);
-        methodVisitor.visitLineNumber(156, label6);
-        methodVisitor.visitVarInsn(ALOAD, 3);
-        methodVisitor.visitVarInsn(ALOAD, 6);
-        methodVisitor.visitMethodInsn(
-            INVOKESTATIC,
-            "kotlinx/coroutines/channels/ChannelsKt",
-            "cancelConsumed",
-            "(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V",
-            false);
-        Label label41 = new Label();
-        methodVisitor.visitLabel(label41);
-        methodVisitor.visitLineNumber(151, label41);
-        Label label42 = new Label();
-        methodVisitor.visitJumpInsn(GOTO, label42);
-        methodVisitor.visitLabel(label2);
-        methodVisitor.visitLineNumber(152, label2);
-        methodVisitor.visitFrame(
-            Opcodes.F_FULL,
-            11,
-            new Object[] {
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-              "java/lang/Object",
-              "kotlinx/coroutines/CoroutineScope",
-              "kotlinx/coroutines/channels/ReceiveChannel",
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber",
-              Opcodes.INTEGER,
-              Opcodes.NULL,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              "java/lang/Object"
-            },
-            1,
-            new Object[] {"java/lang/Throwable"});
-        methodVisitor.visitVarInsn(ASTORE, 9);
-        Label label43 = new Label();
-        methodVisitor.visitLabel(label43);
-        methodVisitor.visitLineNumber(153, label43);
-        methodVisitor.visitVarInsn(ALOAD, 9);
-        methodVisitor.visitVarInsn(ASTORE, 6);
-        Label label44 = new Label();
-        methodVisitor.visitLabel(label44);
-        methodVisitor.visitLineNumber(154, label44);
-        methodVisitor.visitVarInsn(ALOAD, 9);
-        methodVisitor.visitInsn(ATHROW);
-        methodVisitor.visitLabel(label7);
-        methodVisitor.visitLineNumber(155, label7);
-        methodVisitor.visitFrame(
-            Opcodes.F_FULL,
-            11,
-            new Object[] {
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-              "java/lang/Object",
-              "kotlinx/coroutines/CoroutineScope",
-              "kotlinx/coroutines/channels/ReceiveChannel",
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber",
-              Opcodes.INTEGER,
-              "java/lang/Throwable",
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              "java/lang/Object"
-            },
-            1,
-            new Object[] {"java/lang/Throwable"});
-        methodVisitor.visitVarInsn(ASTORE, 9);
-        methodVisitor.visitLabel(label8);
-        methodVisitor.visitLineNumber(156, label8);
-        methodVisitor.visitVarInsn(ALOAD, 3);
-        methodVisitor.visitVarInsn(ALOAD, 6);
-        methodVisitor.visitMethodInsn(
-            INVOKESTATIC,
-            "kotlinx/coroutines/channels/ChannelsKt",
-            "cancelConsumed",
-            "(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V",
-            false);
-        methodVisitor.visitVarInsn(ALOAD, 9);
-        methodVisitor.visitInsn(ATHROW);
-        methodVisitor.visitLabel(label10);
-        methodVisitor.visitLineNumber(73, label10);
-        methodVisitor.visitFrame(
-            Opcodes.F_FULL,
-            11,
-            new Object[] {
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-              "java/lang/Object",
-              "kotlinx/coroutines/CoroutineScope",
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              "java/lang/Object"
-            },
-            1,
-            new Object[] {"kotlinx/coroutines/channels/ClosedReceiveChannelException"});
-        methodVisitor.visitVarInsn(ASTORE, 3);
-        methodVisitor.visitLabel(label42);
-        methodVisitor.visitLineNumber(75, label42);
-        methodVisitor.visitFrame(
-            Opcodes.F_FULL,
-            11,
-            new Object[] {
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-              "java/lang/Object",
-              "kotlinx/coroutines/CoroutineScope",
-              "java/lang/Object",
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              "java/lang/Object"
-            },
-            0,
-            new Object[] {});
-        methodVisitor.visitFieldInsn(GETSTATIC, "kotlin/Unit", "INSTANCE", "Lkotlin/Unit;");
-        methodVisitor.visitInsn(ARETURN);
-        methodVisitor.visitLabel(label15);
-        methodVisitor.visitFrame(
-            Opcodes.F_FULL,
-            11,
-            new Object[] {
-              "io/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1",
-              "java/lang/Object",
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              Opcodes.TOP,
-              "java/lang/Object"
-            },
-            0,
-            new Object[] {});
-        methodVisitor.visitTypeInsn(NEW, "java/lang/IllegalStateException");
-        methodVisitor.visitInsn(DUP);
-        methodVisitor.visitLdcInsn("call to 'resume' before 'invoke' with coroutine");
-        methodVisitor.visitMethodInsn(
-            INVOKESPECIAL,
-            "java/lang/IllegalStateException",
-            "<init>",
-            "(Ljava/lang/String;)V",
-            false);
-        methodVisitor.visitInsn(ATHROW);
-        methodVisitor.visitLocalVariable(
-            "$this$launch", "Lkotlinx/coroutines/CoroutineScope;", null, label9, label13, 2);
-        methodVisitor.visitLocalVariable(
-            "$this$launch", "Lkotlinx/coroutines/CoroutineScope;", null, label3, label14, 2);
-        methodVisitor.visitLocalVariable(
-            "$this$launch", "Lkotlinx/coroutines/CoroutineScope;", null, label5, label23, 2);
-        methodVisitor.visitLocalVariable(
-            "$this$consume$iv",
-            "Lkotlinx/coroutines/channels/ReceiveChannel;",
-            null,
-            label18,
-            label13,
-            3);
-        methodVisitor.visitLocalVariable(
-            "$this$consume$iv",
-            "Lkotlinx/coroutines/channels/ReceiveChannel;",
-            null,
-            label34,
-            label14,
-            3);
-        methodVisitor.visitLocalVariable(
-            "$this$consume$iv",
-            "Lkotlinx/coroutines/channels/ReceiveChannel;",
-            null,
-            label39,
-            label40,
-            3);
-        methodVisitor.visitLocalVariable(
-            "$this$consume$iv",
-            "Lkotlinx/coroutines/channels/ReceiveChannel;",
-            null,
-            label40,
-            label41,
-            3);
-        methodVisitor.visitLocalVariable(
-            "$this$consume$iv",
-            "Lkotlinx/coroutines/channels/ReceiveChannel;",
-            null,
-            label2,
-            label10,
-            3);
-        methodVisitor.visitLocalVariable(
-            "cause$iv", "Ljava/lang/Throwable;", null, label0, label13, 6);
-        methodVisitor.visitLocalVariable(
-            "cause$iv", "Ljava/lang/Throwable;", null, label34, label14, 6);
-        methodVisitor.visitLocalVariable(
-            "cause$iv", "Ljava/lang/Throwable;", null, label39, label40, 6);
-        methodVisitor.visitLocalVariable(
-            "cause$iv", "Ljava/lang/Throwable;", null, label40, label41, 6);
-        methodVisitor.visitLocalVariable(
-            "cause$iv", "Ljava/lang/Throwable;", null, label2, label44, 6);
-        methodVisitor.visitLocalVariable(
-            "cause$iv", "Ljava/lang/Throwable;", null, label44, label10, 6);
-        methodVisitor.visitLocalVariable(
-            "buffer", "Ljava/nio/ByteBuffer;", null, label25, label27, 8);
-        methodVisitor.visitLocalVariable(
-            "buffer", "Ljava/nio/ByteBuffer;", null, label26, label4, 8);
-        methodVisitor.visitLocalVariable("e$iv", "Ljava/lang/Throwable;", null, label43, label7, 9);
-        methodVisitor.visitLocalVariable(
-            "$i$a$-consume-JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1$1",
-            "I",
-            null,
-            label22,
-            label13,
-            7);
-        methodVisitor.visitLocalVariable("$i$f$consume", "I", null, label19, label13, 5);
-        methodVisitor.visitLocalVariable(
-            "this",
-            "Lio/ktor/client/engine/java/JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1;",
-            null,
-            label16,
-            label15,
-            0);
-        methodVisitor.visitLocalVariable(
-            "$result", "Ljava/lang/Object;", null, label16, label15, 1);
-        methodVisitor.visitLocalVariable(
-            "$i$a$-consume-JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1$1",
-            "I",
-            null,
-            label33,
-            label14,
-            7);
-        methodVisitor.visitLocalVariable("$i$f$consume", "I", null, label32, label14, 5);
-        methodVisitor.visitLocalVariable(
-            "$i$a$-consume-JavaHttpResponseBodyHandler$JavaHttpResponseBodySubscriber$1$1",
-            "I",
-            null,
-            label38,
-            label40,
-            7);
-        methodVisitor.visitLocalVariable("$i$f$consume", "I", null, label37, label10, 5);
-        methodVisitor.visitMaxs(5, 11);
-        methodVisitor.visitEnd();
-      }
-      {
-        methodVisitor =
-            classWriter.visitMethod(
-                ACC_PUBLIC | ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null);
-        methodVisitor.visitCode();
-        Label label0 = new Label();
-        methodVisitor.visitLabel(label0);
-        methodVisitor.visitLineNumber(70, label0);
-        methodVisitor.visitTypeInsn(
-            NEW, "com/android/tools/r8/cf/CfDebugLocalStackMapVerificationTest$Main");
-        methodVisitor.visitInsn(DUP);
-        methodVisitor.visitMethodInsn(
-            INVOKESPECIAL,
-            "com/android/tools/r8/cf/CfDebugLocalStackMapVerificationTest$Main",
-            "<init>",
-            "()V",
-            false);
-        methodVisitor.visitInsn(ACONST_NULL);
-        methodVisitor.visitMethodInsn(
-            INVOKEVIRTUAL,
-            "com/android/tools/r8/cf/CfDebugLocalStackMapVerificationTest$Main",
-            "invokeSuspend",
-            "(Ljava/lang/Object;)Ljava/lang/Object;",
-            false);
-        methodVisitor.visitInsn(POP);
-        Label label1 = new Label();
-        methodVisitor.visitLabel(label1);
-        methodVisitor.visitLineNumber(71, label1);
-        methodVisitor.visitInsn(RETURN);
-        Label label2 = new Label();
-        methodVisitor.visitLabel(label2);
-        methodVisitor.visitLocalVariable("args", "[Ljava/lang/String;", null, label0, label2, 0);
-        methodVisitor.visitMaxs(2, 1);
-        methodVisitor.visitEnd();
-      }
-      classWriter.visitEnd();
-
-      return classWriter.toByteArray();
-    }
+    testForR8(parameters.getBackend())
+        .debug()
+        .addProgramClasses(SmallRepro.class)
+        .addKeepAllAttributes()
+        .addDontShrink()
+        .addDontObfuscate()
+        .addDontOptimize()
+        .addOptionsModification(
+            options -> {
+              options.testing.neverReuseCfLocalRegisters = true;
+              // TODO(b/237567012): Remove option when resolved.
+              options.enableCheckAllInstructionsDuringStackMapVerification = true;
+            })
+        .run(parameters.getRuntime(), SmallRepro.class)
+        .assertSuccessWithOutputThatMatches(containsString("FOO"));
   }
 }