diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/VirtualRootMethodsAnalysisBase.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/VirtualRootMethodsAnalysisBase.java
index 4f8fde7..0165f8e 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/VirtualRootMethodsAnalysisBase.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/VirtualRootMethodsAnalysisBase.java
@@ -219,17 +219,19 @@
               && !virtualRootMethod.hasSiblings()
               && !virtualRootMethod.isMayDispatchOutsideProgramSet()) {
             monomorphicVirtualRootMethods.add(rootCandidate);
-          } else {
+            return;
+          }
+          if (!rootCandidate.getHolder().isInterface()) {
             VirtualRootMethod singleDispatchTarget = virtualRootMethod.getSingleDispatchTarget();
             if (singleDispatchTarget != null) {
               virtualRootMethod.forEach(
                   method -> setRootMethod(method, virtualRootMethod, singleDispatchTarget));
               monomorphicVirtualNonRootMethods.add(singleDispatchTarget.getMethod());
-            } else {
-              virtualRootMethod.forEach(
-                  method -> setRootMethod(method, virtualRootMethod, virtualRootMethod));
+              return;
             }
           }
+          virtualRootMethod.forEach(
+              method -> setRootMethod(method, virtualRootMethod, virtualRootMethod));
         });
   }
 
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/PropagationFromBaseMethodWithSingleTargetTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/PropagationFromBaseMethodWithSingleTargetTest.java
index cfe8557..9a48d47 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/PropagationFromBaseMethodWithSingleTargetTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/PropagationFromBaseMethodWithSingleTargetTest.java
@@ -33,15 +33,6 @@
   }
 
   @Test
-  public void testJvm() throws Exception {
-    parameters.assumeJvmTestParameters();
-    testForJvm(parameters)
-        .addInnerClasses(getClass())
-        .run(parameters.getRuntime(), Main.class)
-        .assertSuccessWithOutputLines("B", "C");
-  }
-
-  @Test
   public void testR8() throws Exception {
     testForR8(parameters.getBackend())
         .addInnerClasses(getClass())
@@ -54,8 +45,7 @@
         .setMinApi(parameters)
         .compile()
         .run(parameters.getRuntime(), Main.class)
-        // TODO(b/336791970): Should succeed.
-        .assertFailureWithErrorThatThrows(NullPointerException.class);
+        .assertSuccessWithOutputLines("B", "C");
   }
 
   static class Main {
