Handle debug info in cast removal
Change-Id: I34255dd361a8820b23201b405c387142de984743
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java b/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
index e314d6461..8d61a94 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.ir.code.BasicBlock;
import com.android.tools.r8.ir.code.CatchHandlers;
import com.android.tools.r8.ir.code.CatchHandlers.CatchHandler;
+import com.android.tools.r8.ir.code.CheckCast;
import com.android.tools.r8.ir.code.IRCode;
import com.android.tools.r8.ir.code.Instruction;
import com.android.tools.r8.ir.code.InstructionListIterator;
@@ -121,8 +122,12 @@
Instruction current = iterator.previous();
if (current.hasOutValue()) {
// Replace unnecessary cast values.
- if (current.isCheckCast() && !current.asCheckCast().isRefiningStaticType()) {
- current.outValue().replaceUsers(current.asCheckCast().object());
+ if (current.isCheckCast()) {
+ CheckCast checkCast = current.asCheckCast();
+ if (!checkCast.isRefiningStaticType()
+ && checkCast.outValue().getLocalInfo() == checkCast.object().getLocalInfo()) {
+ checkCast.outValue().replaceUsers(checkCast.object());
+ }
}
// Remove unused invoke results.
if (current.isInvoke() && !current.outValue().isUsed()) {