diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodBuilder.java b/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodBuilder.java
index 0c6b359..48536cc 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodBuilder.java
@@ -171,15 +171,17 @@
       maxLocals += 1;
     }
     DexType[] sourceParameters = getSourceParameters();
-    for (int i = 0;
-        i < sourceParameters.length - BooleanUtils.intValue(sourceMethodHasExtraUnusedParameter);
-        i++) {
+    for (int i = 0; i < sourceParameters.length; i++) {
       DexType parameter = sourceParameters[i];
       ValueType parameterType = ValueType.fromDexType(parameter);
-      instructions.add(new CfLoad(parameterType, maxLocals));
+      if (!(sourceMethodHasExtraUnusedParameter && i == sourceParameters.length - 1)) {
+        // We do not need to load the last parameter if it is unused.
+        // We still need to increase the maxStack/maxLocals values for the method to verify.
+        instructions.add(new CfLoad(parameterType, maxLocals));
+        maybeInsertArgumentCast(i, parameter, instructions);
+      }
       maxStack += parameterType.requiredRegisters();
       maxLocals += parameterType.requiredRegisters();
-      maybeInsertArgumentCast(i, parameter, instructions);
     }
     instructions.add(new CfInvoke(getInvokeOpcode(), targetMethod, isInterface));
     if (!targetMethod.getReturnType().isVoidType()) {
diff --git a/src/main/java/com/android/tools/r8/repackaging/Repackaging.java b/src/main/java/com/android/tools/r8/repackaging/Repackaging.java
index c6612c5..188e749 100644
--- a/src/main/java/com/android/tools/r8/repackaging/Repackaging.java
+++ b/src/main/java/com/android/tools/r8/repackaging/Repackaging.java
@@ -428,9 +428,7 @@
       // Ensure that the generated name is unique.
       DexType finalRepackagedDexType = repackagedDexType;
       for (int i = 1; isRepackageTypeUsed(finalRepackagedDexType, mappings, appView); i++) {
-        finalRepackagedDexType =
-            repackagedDexType.addSuffix(
-                Character.toString(INNER_CLASS_SEPARATOR) + i, dexItemFactory);
+        finalRepackagedDexType = repackagedDexType.addSuffix(i + "", dexItemFactory);
       }
       return finalRepackagedDexType;
     }
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java
index 68f3fcf..58cf498 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java
@@ -32,7 +32,6 @@
 import com.google.common.collect.ImmutableList;
 import java.util.function.BiFunction;
 import java.util.function.Function;
-import org.junit.Assume;
 import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -54,6 +53,7 @@
         .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
         .withDexRuntimes()
         .withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
+        .enableApiLevelsForCf()
         .build();
   }
 
@@ -120,9 +120,8 @@
 
   @Test
   public void testSingleNestD8() throws Exception {
-    Assume.assumeTrue(parameters.isDexRuntime());
     for (String nestID : NEST_IDS) {
-      testForD8()
+      testForD8(parameters.getBackend())
           .setMinApi(parameters.getApiLevel())
           .addProgramFiles(classesOfNest(nestID))
           .compile()
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java
index 47320d8..ffaca18 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java
@@ -42,6 +42,7 @@
         .withDexRuntime(DexVm.Version.first())
         .withDexRuntime(DexVm.Version.last())
         .withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
+        .enableApiLevelsForCf()
         .build();
   }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java
index 2abe133..00575cd 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java
@@ -43,7 +43,10 @@
 
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
-    return getTestParameters().withCfRuntimesStartingFromIncluding(CfVm.JDK11).build();
+    return getTestParameters()
+        .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
+        .withAllApiLevelsAlsoForCf()
+        .build();
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestClassMergingTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestClassMergingTest.java
index 9f41a17..3e8fc2a 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestClassMergingTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestClassMergingTest.java
@@ -44,6 +44,7 @@
   public static TestParametersCollection data() {
     return getTestParameters()
         .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
+        .withAllApiLevelsAlsoForCf()
         .build();
   }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java
index fd874a1..2533da9 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java
@@ -32,7 +32,6 @@
 import java.nio.file.Path;
 import java.util.List;
 import org.hamcrest.Matcher;
-import org.junit.Assume;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -54,12 +53,12 @@
         .withDexRuntime(DexVm.Version.first())
         .withDexRuntime(DexVm.Version.last())
         .withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
+        .enableApiLevelsForCf()
         .build();
   }
 
   @Test
   public void testD8() throws Exception {
-    Assume.assumeTrue(parameters.isDexRuntime());
     testMissingNestHostError(true);
     testIncompleteNestError(true);
   }
@@ -87,7 +86,9 @@
             .map(name -> CLASSES_PATH.resolve(name + CLASS_EXTENSION))
             .collect(toList());
     if (d8) {
-      return testForD8().setMinApi(parameters.getApiLevel()).addProgramFiles(matchingClasses);
+      return testForD8(parameters.getBackend())
+          .setMinApi(parameters.getApiLevel())
+          .addProgramFiles(matchingClasses);
     } else {
       return testForR8(parameters.getBackend())
           .noTreeShaking()
@@ -109,10 +110,11 @@
           .compileWithExpectedDiagnostics(
               diagnostics -> {
                 if (d8) {
-                  diagnostics
-                      .assertOnlyErrors()
-                      .assertErrorsMatch(
-                          diagnosticType(MissingNestHostNestDesugarDiagnostic.class));
+                  if (parameters.getBackend().isDex()) {
+                    diagnostics.assertOnlyErrors();
+                  }
+                  diagnostics.assertErrorsMatch(
+                      diagnosticType(MissingNestHostNestDesugarDiagnostic.class));
 
                   MissingNestHostNestDesugarDiagnostic diagnostic =
                       (MissingNestHostNestDesugarDiagnostic) diagnostics.getErrors().get(0);
@@ -148,9 +150,11 @@
           .compileWithExpectedDiagnostics(
               diagnostics -> {
                 if (d8) {
-                  diagnostics
-                      .assertOnlyErrors()
-                      .assertErrorsMatch(diagnosticType(IncompleteNestNestDesugarDiagnosic.class));
+                  if (parameters.getBackend().isDex()) {
+                    diagnostics.assertOnlyErrors();
+                  }
+                  diagnostics.assertErrorsMatch(
+                      diagnosticType(IncompleteNestNestDesugarDiagnosic.class));
 
                   IncompleteNestNestDesugarDiagnosic diagnostic =
                       (IncompleteNestNestDesugarDiagnosic) diagnostics.getErrors().get(0);
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java
index b216639..04eac5e 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java
@@ -35,6 +35,7 @@
         .withDexRuntime(DexVm.Version.first())
         .withDexRuntime(DexVm.Version.last())
         .withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
+        .enableApiLevelsForCf()
         .build();
   }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestMethodInlinedTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestMethodInlinedTest.java
index 373f6fc..726f391 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestMethodInlinedTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestMethodInlinedTest.java
@@ -36,7 +36,10 @@
 
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
-    return getTestParameters().withCfRuntimesStartingFromIncluding(CfVm.JDK11).build();
+    return getTestParameters()
+        .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
+        .withAllApiLevelsAlsoForCf()
+        .build();
   }
 
   @Test
diff --git a/tools/internal_test.py b/tools/internal_test.py
index 48409c0..e267763 100755
--- a/tools/internal_test.py
+++ b/tools/internal_test.py
@@ -89,7 +89,8 @@
         'find-xmx-min': 128,
         'find-xmx-max': 1024,
         'find-xmx-range': 16,
-        'oom-threshold': 267,
+        # TODO(b/183371778): Figure out why the need to bump this
+        'oom-threshold': 329,
     },
 ]
 
