diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 0516577..3eab5e6 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -622,7 +622,7 @@
 
             new BridgeHoisting(appViewWithLiveness).run();
 
-            assert Inliner.verifyAllSingleCallerMethodsHaveBeenPruned(appView);
+            assert Inliner.verifyAllSingleCallerMethodsHaveBeenPruned(appViewWithLiveness);
 
             assert appView.allMergedClasses().verifyAllSourcesPruned(appViewWithLiveness);
             assert appView.validateUnboxedEnumsHaveBeenPruned();
diff --git a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
index 84ec3c5..98c8bd2 100644
--- a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
@@ -71,6 +71,16 @@
     definition.parameterAnnotationsList.collectIndexedItems(indexedItems);
   }
 
+  public boolean canBeConvertedToAbstractMethod(AppView<AppInfoWithLiveness> appView) {
+    return (appView.options().canUseAbstractMethodOnNonAbstractClass()
+            || getHolder().isAbstract()
+            || getHolder().isInterface())
+        && !getAccessFlags().isNative()
+        && !getAccessFlags().isPrivate()
+        && !getAccessFlags().isStatic()
+        && !appView.appInfo().isFailedResolutionTarget(getReference());
+  }
+
   public void convertToAbstractOrThrowNullMethod(AppView<AppInfoWithLiveness> appView) {
     if (!convertToAbstractMethodIfPossible(appView)) {
       convertToThrowNullMethod(appView);
@@ -78,14 +88,7 @@
   }
 
   private boolean convertToAbstractMethodIfPossible(AppView<AppInfoWithLiveness> appView) {
-    boolean canBeAbstract =
-        (appView.options().canUseAbstractMethodOnNonAbstractClass()
-                || getHolder().isAbstract()
-                || getHolder().isInterface())
-            && !getAccessFlags().isNative()
-            && !getAccessFlags().isPrivate()
-            && !getAccessFlags().isStatic()
-            && !appView.appInfo().isFailedResolutionTarget(getReference());
+    boolean canBeAbstract = canBeConvertedToAbstractMethod(appView);
     if (canBeAbstract) {
       MethodAccessFlags accessFlags = getAccessFlags();
       accessFlags.demoteFromFinal();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index 32df085..ecf8f25 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -1347,12 +1347,15 @@
     singleCallerInlinedMethods.clear();
   }
 
-  public static boolean verifyAllSingleCallerMethodsHaveBeenPruned(AppView<?> appView) {
+  public static boolean verifyAllSingleCallerMethodsHaveBeenPruned(
+      AppView<AppInfoWithLiveness> appView) {
     for (DexProgramClass clazz : appView.appInfo().classesWithDeterministicOrder()) {
-      for (DexEncodedMethod method : clazz.methods()) {
-        assert !method.getOptimizationInfo().hasBeenInlinedIntoSingleCallSite() || !method.hasCode()
-            : "Method was single caller inlined: " + method.toSourceString();
-      }
+      clazz.forEachProgramMethodMatching(
+          method -> method.getOptimizationInfo().hasBeenInlinedIntoSingleCallSite(),
+          method -> {
+            assert !method.getDefinition().hasCode()
+                || !method.canBeConvertedToAbstractMethod(appView);
+          });
     }
     return true;
   }
