Handle StringSwitch in constant propagation
Change-Id: Ic0dea2eb4a6f19a4cc2f76b76e4a95d934447429
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/constant/SparseConditionalConstantPropagation.java b/src/main/java/com/android/tools/r8/ir/analysis/constant/SparseConditionalConstantPropagation.java
index 0bb8f21..be72b24 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/constant/SparseConditionalConstantPropagation.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/constant/SparseConditionalConstantPropagation.java
@@ -222,9 +222,14 @@
} else if (jumpInstruction.isStringSwitch()) {
StringSwitch switchInst = jumpInstruction.asStringSwitch();
LatticeElement switchElement = getLatticeElement(switchInst.value());
-
- // There is currently no constant propagation for strings.
- assert !switchElement.isConst();
+ if (switchElement.isConst()) {
+ // There is currently no constant propagation for strings, so it must be null.
+ assert switchElement.asConst().getConstNumber().isZero();
+ BasicBlock target = switchInst.fallthroughBlock();
+ setExecutableEdge(jumpInstBlockNumber, target.getNumber());
+ flowEdges.add(target);
+ return;
+ }
} else {
assert jumpInstruction.isGoto() || jumpInstruction.isReturn() || jumpInstruction.isThrow();
}