diff --git a/src/main/java/com/android/tools/r8/features/FeatureSplitBoundaryOptimizationUtils.java b/src/main/java/com/android/tools/r8/features/FeatureSplitBoundaryOptimizationUtils.java
index f9acf30..b252ad4 100644
--- a/src/main/java/com/android/tools/r8/features/FeatureSplitBoundaryOptimizationUtils.java
+++ b/src/main/java/com/android/tools/r8/features/FeatureSplitBoundaryOptimizationUtils.java
@@ -66,20 +66,23 @@
     }
 
     // Next perform startup checks.
-    StartupProfile startupProfile = appView.getStartupProfile();
-    OptionalBool callerIsStartupMethod = isStartupMethod(caller, startupProfile);
-    if (callerIsStartupMethod.isTrue()) {
-      // If the caller is a startup method, then only allow inlining if the callee is also a startup
-      // method.
-      if (isStartupMethod(callee, startupProfile).isFalse()) {
-        return false;
-      }
-    } else if (callerIsStartupMethod.isFalse()) {
-      // If the caller is not a startup method, then only allow inlining if the caller is not a
-      // startup class or the callee is a startup class.
-      if (startupProfile.isStartupClass(caller.getHolderType())
-          && !startupProfile.isStartupClass(callee.getHolderType())) {
-        return false;
+    if (!callee.getOptimizationInfo().forceInline()) {
+      StartupProfile startupProfile = appView.getStartupProfile();
+      OptionalBool callerIsStartupMethod = isStartupMethod(caller, startupProfile);
+      if (callerIsStartupMethod.isTrue()) {
+        // If the caller is a startup method, then only allow inlining if the callee is also a
+        // startup
+        // method.
+        if (isStartupMethod(callee, startupProfile).isFalse()) {
+          return false;
+        }
+      } else if (callerIsStartupMethod.isFalse()) {
+        // If the caller is not a startup method, then only allow inlining if the caller is not a
+        // startup class or the callee is a startup class.
+        if (startupProfile.isStartupClass(caller.getHolderType())
+            && !startupProfile.isStartupClass(callee.getHolderType())) {
+          return false;
+        }
       }
     }
     return true;
diff --git a/src/test/java/com/android/tools/r8/startup/ForceInlineAfterVerticalClassMergingStartupTest.java b/src/test/java/com/android/tools/r8/startup/ForceInlineAfterVerticalClassMergingStartupTest.java
index 745d0aa..b3951cc 100644
--- a/src/test/java/com/android/tools/r8/startup/ForceInlineAfterVerticalClassMergingStartupTest.java
+++ b/src/test/java/com/android/tools/r8/startup/ForceInlineAfterVerticalClassMergingStartupTest.java
@@ -4,14 +4,10 @@
 
 package com.android.tools.r8.startup;
 
-import static org.junit.Assert.assertTrue;
 
-import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.R8TestCompileResult;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.references.Reference;
 import com.android.tools.r8.startup.profile.ExternalStartupClass;
 import com.android.tools.r8.startup.profile.ExternalStartupItem;
@@ -54,32 +50,16 @@
             ExternalStartupMethod.builder()
                 .setMethodReference(MethodReferenceUtils.instanceConstructor(B.class))
                 .build());
-
-    // TODO(b/284334258): Test should always succeed with "B".
-    R8TestCompileResult compileResult;
-    try {
-      compileResult =
-          testForR8(parameters.getBackend())
-              .addInnerClasses(getClass())
-              .addKeepMainRule(Main.class)
-              .addVerticallyMergedClassesInspector(
-                  inspector -> inspector.assertMergedIntoSubtype(A.class))
-              .apply(
-                  testBuilder -> StartupTestingUtils.addStartupProfile(testBuilder, startupProfile))
-              .setMinApi(parameters)
-              .compile();
-    } catch (CompilationFailedException e) {
-      assertTrue(parameters.isCfRuntime());
-      return;
-    }
-
-    assertTrue(parameters.isDexRuntime());
-    compileResult
+    testForR8(parameters.getBackend())
+        .addInnerClasses(getClass())
+        .addKeepMainRule(Main.class)
+        .addVerticallyMergedClassesInspector(
+            inspector -> inspector.assertMergedIntoSubtype(A.class))
+        .apply(testBuilder -> StartupTestingUtils.addStartupProfile(testBuilder, startupProfile))
+        .setMinApi(parameters)
+        .compile()
         .run(parameters.getRuntime(), Main.class)
-        .applyIf(
-            parameters.getDexRuntimeVersion().isEqualToOneOf(Version.V5_1_1, Version.V6_0_1),
-            runResult -> runResult.assertSuccessWithOutputLines("B"),
-            runResult -> runResult.assertFailureWithErrorThatThrows(VerifyError.class));
+        .assertSuccessWithOutputLines("B");
   }
 
   static class Main {
