CheckCast chains should only be removed for chains of size 2 or greater Change-Id: Iae915d120ce0a210abcf04ae648d7e906628e0a1
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 6576097..63acc0a 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
@@ -2073,8 +2073,8 @@ user.isCheckCast() && appView.isSubtype(user.asCheckCast().getType(), castType).isTrue(); if (!checkCast.getBlock().hasCatchHandlers() - && outValue.isUsed() && outValue.numberOfPhiUsers() == 0 + && outValue.numberOfUsers() > 0 && outValue.uniqueUsers().stream().allMatch(isCheckcastToSubtype)) { // The removeOrReplaceByDebugLocalWrite will propagate the incoming value for the CheckCast // to the users of the CheckCast's out value.