Convert default methods with possible IAEs to abstract when desugaring

Bug: b/335240266
Change-Id: Ic8c7d2b8a4fdfa07de40461665f2575525e22c65
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 54dc05d..21b8de8 100644
--- a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
@@ -81,14 +81,27 @@
   }
 
   public boolean canBeConvertedToAbstractMethod(AppView<AppInfoWithLiveness> appView) {
-    return (appView.options().canUseAbstractMethodOnNonAbstractClass()
+    if (!(appView.options().canUseAbstractMethodOnNonAbstractClass()
             || getHolder().isAbstract()
             || getHolder().isInterface())
-        && !getAccessFlags().isNative()
-        && !getAccessFlags().isPrivate()
-        && !getAccessFlags().isStatic()
-        && !getDefinition().isInstanceInitializer()
-        && !appView.appInfo().isFailedMethodResolutionTarget(getReference());
+        || getAccessFlags().isNative()
+        || getAccessFlags().isPrivate()
+        || getAccessFlags().isStatic()
+        || getDefinition().isInstanceInitializer()) {
+      return false;
+    }
+    // If the method has a failed resolution, then keep the method as non-abstract to preserve
+    // runtime errors, except when interface method desugaring is required.
+    if (appView.appInfo().isFailedMethodResolutionTarget(getReference())) {
+      boolean mustBeConvertedToAbstractMethod =
+          !appView.options().canUseDefaultAndStaticInterfaceMethods()
+              && getHolder().isInterface()
+              && getAccessFlags().belongsToVirtualPool();
+      if (!mustBeConvertedToAbstractMethod) {
+        return false;
+      }
+    }
+    return true;
   }
 
   public void convertToAbstractOrThrowNullMethod(AppView<AppInfoWithLiveness> appView) {