Workaround Art bug for invoke-interface on Object methods

In some situations using invoke-interface on Object methods
could lead to undefined behaviour in Art on Android T.

Rewrite these invoke-interface instructions to invoke-virtual.

This rewriting was already supported for other issues on Art/Dalvik
prior to Android S.

Generating invokeinterface on Object methods was introduced into
javac in JDK-18.

Bug: b/326661821
Change-Id: I3195651a5b7d9a47304e49636d196d5b22e0edb9
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 02e6e1d..a09100a 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -3133,8 +3133,13 @@
   // JDK 18.
   //
   // See b/218298666.
+  //
+  // Art also had a bug in Android T, where this could lead to undefined behaviour (interpreter
+  // only).
+  //
+  // See b/326661821 (details in b/326661821#comment33).
   public boolean canHaveInvokeInterfaceToObjectMethodBug() {
-    return canHaveBugPresentUntil(AndroidApiLevel.S);
+    return canHaveBugPresentUntil(AndroidApiLevel.U);
   }
 
   // Until we fully drop support for API levels < 16, we have to emit an empty annotation set to
diff --git a/src/test/java/com/android/tools/r8/desugar/jdk8272564/Jdk8272564Test.java b/src/test/java/com/android/tools/r8/desugar/jdk8272564/Jdk8272564Test.java
index ddd0285..43853de 100644
--- a/src/test/java/com/android/tools/r8/desugar/jdk8272564/Jdk8272564Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/jdk8272564/Jdk8272564Test.java
@@ -142,7 +142,7 @@
         .addProgramFiles(Jdk8272564.jar())
         .run(parameters.getRuntime(), Jdk8272564.Main.typeName())
         .applyIf(
-            parameters.isDexRuntime() && parameters.getApiLevel().isLessThan(AndroidApiLevel.S),
+            parameters.isDexRuntime() && parameters.getApiLevel().isLessThan(AndroidApiLevel.U),
             b -> b.inspect(this::assertJdk8272564NotFixedCode),
             b -> b.inspect(this::assertJdk8272564FixedCode))
         .assertSuccess();