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);