Version 1.6.88

Cherry pick: Guard for NPE when switch map and enum info is inconsistent
CL: https://r8-review.googlesource.com/c/r8/+/50477

Note: A 'return' has been changed to a 'continue' in the cherry-pick.

Bug: 154315490
Change-Id: Idc324bbd6e1d9edf82de220ded09d9f62c5ed089
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index c96fa6f..1427a23 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 = "1.6.87";
+  public static final String LABEL = "1.6.88";
 
   private Version() {
   }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
index 00cb046..dbc2800 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
@@ -1075,7 +1075,17 @@
             int key = switchInsn.getKey(i);
             DexField field = info.indexMap.get(key);
             EnumValueInfo valueInfo = info.valueInfoMap.get(field);
-            targetMap.put(valueInfo.ordinal, switchInsn.targetBlockIndices()[i]);
+            if (valueInfo != null) {
+              targetMap.put(valueInfo.ordinal, switchInsn.targetBlockIndices()[i]);
+            } else {
+              // The switch map refers to a field on the enum that does not exist in this
+              // compilation.
+              targetMap = null;
+              break;
+            }
+          }
+          if (targetMap == null) {
+            continue;
           }
           int[] keys = targetMap.keySet().toIntArray();
           Arrays.sort(keys);