Fix AssertionError in If#toString when cleaned for removal
Change-Id: I800038419e05875e01f0c945df785b76a2232969
diff --git a/src/main/java/com/android/tools/r8/ir/code/If.java b/src/main/java/com/android/tools/r8/ir/code/If.java
index 0149b70..b0ecd2d 100644
--- a/src/main/java/com/android/tools/r8/ir/code/If.java
+++ b/src/main/java/com/android/tools/r8/ir/code/If.java
@@ -125,15 +125,22 @@
@Override
public String toString() {
- return super.toString()
- + " "
- + type
- + (isZeroTest() ? "Z" : " ")
- + " block "
- + getTrueTarget().getNumberAsString()
- + " (fallthrough "
- + fallthroughBlock().getNumberAsString()
- + ")";
+ StringBuilder builder =
+ new StringBuilder(super.toString())
+ .append(' ')
+ .append(type)
+ .append(isZeroTest() ? 'Z' : ' ');
+ // If this instruction is in a block that has been marked for removal, but not yet removed from
+ // the IR, make sure we can still print the code.
+ if (getBlock().exit() == this && getBlock().getSuccessors().size() >= 2) {
+ builder
+ .append(" block ")
+ .append(getTrueTarget().getNumberAsString())
+ .append(" (fallthrough ")
+ .append(fallthroughBlock().getNumberAsString())
+ .append(')');
+ }
+ return builder.toString();
}
@Override