diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index e509746..98ff11a 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
 
   // This field is accessed from release scripts using simple pattern matching.
   // Therefore, changing this field could break our release scripts.
-  public static final String LABEL = "2.0.72";
+  public static final String LABEL = "2.0.73";
 
   private Version() {
   }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapWithMissingFieldTest.java b/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapWithMissingFieldTest.java
index 796b3d9..707eb10 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapWithMissingFieldTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapWithMissingFieldTest.java
@@ -11,6 +11,8 @@
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.Reference;
+import com.android.tools.r8.utils.StringUtils;
+import java.io.File;
 import java.io.IOException;
 import java.nio.file.Path;
 import org.junit.Test;
@@ -58,10 +60,11 @@
   }
 
   private static Path getSwitchMapProgramFile() throws IOException {
+    String switchMapFileName =
+        StringUtils.join(File.separator, getSwitchMapClassReference().getBinaryName().split("/"))
+            + ".class";
     return getClassFilesForInnerClasses(SwitchMapWithMissingFieldTest.class).stream()
-        .filter(
-            file ->
-                file.toString().endsWith(getSwitchMapClassReference().getBinaryName() + ".class"))
+        .filter(file -> file.toString().endsWith(switchMapFileName))
         .findFirst()
         .get();
   }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapWithUnexpectedFieldTest.java b/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapWithUnexpectedFieldTest.java
index 0679ef6..167cd47 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapWithUnexpectedFieldTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapWithUnexpectedFieldTest.java
@@ -11,6 +11,8 @@
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.Reference;
+import com.android.tools.r8.utils.StringUtils;
+import java.io.File;
 import java.io.IOException;
 import java.nio.file.Path;
 import org.junit.Test;
@@ -64,10 +66,11 @@
   }
 
   private static Path getSwitchMapProgramFile() throws IOException {
+    String switchMapFileName =
+        StringUtils.join(File.separator, getSwitchMapClassReference().getBinaryName().split("/"))
+            + ".class";
     return getClassFilesForInnerClasses(SwitchMapWithUnexpectedFieldTest.class).stream()
-        .filter(
-            file ->
-                file.toString().endsWith(getSwitchMapClassReference().getBinaryName() + ".class"))
+        .filter(file -> file.toString().endsWith(switchMapFileName))
         .findFirst()
         .get();
   }
