Allow sources for moves to be more precise than the static type
Bug: 144302929
Change-Id: If00e2534d81eb5bb16eb36305650672933d22300
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java b/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java
index 4e1e00a..453a564 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java
@@ -75,4 +75,11 @@
public boolean isAllowedAfterThrowingInstruction() {
return true;
}
+
+ @Override
+ public boolean verifyTypes(AppView<?> appView) {
+ super.verifyTypes(appView);
+ assert src().getTypeLattice().lessThanOrEqual(outValue().getTypeLattice(), appView);
+ return true;
+ }
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/Move.java b/src/main/java/com/android/tools/r8/ir/code/Move.java
index 9054d07..3478645 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Move.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Move.java
@@ -126,7 +126,10 @@
@Override
public boolean verifyTypes(AppView<?> appView) {
super.verifyTypes(appView);
- assert src().getTypeLattice().equals(outValue().getTypeLattice());
+ // DebugLocalWrite defines it's own verification of types but should be allowed to call super.
+ if (!this.isDebugLocalWrite()) {
+ assert src().getTypeLattice().equals(outValue().getTypeLattice());
+ }
return true;
}
}