Fixup invalid EnclosingMethodAttribute if referencing clinit

Bug: 201622820
Bug: 201975229
Change-Id: I1b6962ebdb5c3eb2f001e70fc3cf4690d35b988a
diff --git a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
index 296f792..0c78a72 100644
--- a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
@@ -276,7 +276,7 @@
       assert enclosingMember == null;
       DexType ownerType = application.getTypeFromName(owner);
       enclosingMember =
-          name == null
+          name == null || name.equals("<clinit>")
               ? new EnclosingMethodAttribute(ownerType)
               : new EnclosingMethodAttribute(application.getMethod(ownerType, name, desc));
     }
diff --git a/src/test/java/com/android/tools/r8/desugar/enclosingmethod/InvalidEnclosingMethodAttributeTest.java b/src/test/java/com/android/tools/r8/desugar/enclosingmethod/InvalidEnclosingMethodAttributeTest.java
index bf737b9b..6183472 100644
--- a/src/test/java/com/android/tools/r8/desugar/enclosingmethod/InvalidEnclosingMethodAttributeTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/enclosingmethod/InvalidEnclosingMethodAttributeTest.java
@@ -8,7 +8,6 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.references.Reference;
 import java.io.IOException;
 import java.lang.reflect.Method;
@@ -35,43 +34,27 @@
   @Test
   public void testRuntime() throws Exception {
     testForRuntime(parameters)
-        .addProgramClasses(Main.class, A.class)
+        .addProgramClasses(Main.class)
         .addProgramClassFileData(getProgramClassFileDataWithRewrittenEnclosingMethod())
         .run(parameters.getRuntime(), Main.class)
-        .assertSuccessWithOutputLinesIf(
-            parameters.isCfRuntime()
-                || parameters.getDexRuntimeVersion().isNewerThanOrEqual(Version.V7_0_0),
-            "null",
-            typeName(Main.class))
-        .assertSuccessWithOutputLinesIf(
-            parameters.isDexRuntime() && parameters.getDexRuntimeVersion().isDalvik(),
-            "<clinit>",
-            typeName(Main.class))
-        .assertFailureWithErrorThatThrowsIf(
-            parameters.isDexRuntime()
-                && parameters
-                    .getDexRuntimeVersion()
-                    .isInRangeInclusive(Version.V5_1_1, Version.V6_0_1),
-            IncompatibleClassChangeError.class);
+        .assertSuccessWithOutputLines("null", typeName(Main.class));
   }
 
   @Test
   public void testR8() throws Exception {
     testForR8(parameters.getBackend())
-        .addProgramClasses(Main.class, A.class)
+        .addProgramClasses(Main.class)
         .addProgramClassFileData(getProgramClassFileDataWithRewrittenEnclosingMethod())
         .setMinApi(parameters.getApiLevel())
         .addKeepAttributeInnerClassesAndEnclosingMethod()
         .addKeepAllClassesRule()
         .run(parameters.getRuntime(), Main.class)
-        // TODO(b/201790364): We remove the method even if keeping all classes due to <clinit> not
-        //  being pinned.
-        .assertSuccessWithOutputLines("null", "null");
+        .assertSuccessWithOutputLines("null", typeName(Main.class));
   }
 
   private byte[] getProgramClassFileDataWithRewrittenEnclosingMethod() throws IOException {
     Path innerClass = ToolHelper.getClassFilesForInnerClasses(Main.class).iterator().next();
-    return transformer(innerClass, Reference.classFromBinaryName(binaryName(A.class) + "$1"))
+    return transformer(innerClass, Reference.classFromBinaryName(binaryName(Main.class) + "$1"))
         .rewriteEnclosingMethod(binaryName(Main.class), "<clinit>", "()V")
         .transform();
   }