Allow identifier content to follow <init>/<clinit> names.

Bug: b/309080420
Change-Id: I07d86dcd4f91ecc32fcf69235865a4fcd5fef0eb
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapReader.java b/src/main/java/com/android/tools/r8/naming/ProguardMapReader.java
index 71ff9e8..559d7f0 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapReader.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapReader.java
@@ -674,6 +674,11 @@
     }
     if (isInit) {
       expect('>');
+      // There are some files that include identifier text after <clinit>, such as
+      // <clinit>$redex$opt as seen in b/309080420.
+      while (IdentifierUtils.isDexIdentifierPart(peekCodePoint())) {
+        nextCodePoint();
+      }
     }
     if (IdentifierUtils.isDexIdentifierPart(peekCodePoint())) {
       throw new ParseException(
diff --git a/src/test/java/com/android/tools/r8/retrace/InvalidMappingRangesB309080420Test.java b/src/test/java/com/android/tools/r8/retrace/InvalidMappingRangesB309080420Test.java
index 9e45fe5..09ca4e0 100644
--- a/src/test/java/com/android/tools/r8/retrace/InvalidMappingRangesB309080420Test.java
+++ b/src/test/java/com/android/tools/r8/retrace/InvalidMappingRangesB309080420Test.java
@@ -34,7 +34,9 @@
           "a.x -> a.x:",
           "    1:1:void a(com.example.Foo) -> a",
           "    11:2:void a() -> a", // Unexpected line range [11:2] - interpreting as [2:11]
-          "    12:21:void a(android.content.Intent) -> a");
+          "    12:21:void a(android.content.Intent) -> a",
+          // Allow identifier content to follow <init>/<clinit>.
+          "    22:41:void <clinit>$more$stuff() -> clinit$move$stuff");
 
   @Test
   public void test() throws Exception {