Refine @NotNull and unknown types in abstract cast function
Fixes: b/338534237
Change-Id: If64d91f33671443af6f2dd089cf98e7673569439
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReferenceTypeValueState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReferenceTypeValueState.java
index ff432b9..27fdb0e 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReferenceTypeValueState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReferenceTypeValueState.java
@@ -25,9 +25,14 @@
protected static DynamicType cast(
AppView<AppInfoWithLiveness> appView, DexType type, DynamicType dynamicType) {
- if (dynamicType.isBottom() || dynamicType.isNotNullType() || dynamicType.isUnknown()) {
+ if (dynamicType.isBottom()) {
return dynamicType;
}
+ if (dynamicType.isNotNullType() || dynamicType.isUnknown()) {
+ Nullability nullability =
+ dynamicType.isNotNullType() ? Nullability.definitelyNotNull() : Nullability.maybeNull();
+ return DynamicType.create(appView, type.toTypeElement(appView, nullability));
+ }
assert dynamicType.isDynamicTypeWithUpperBound();
DynamicTypeWithUpperBound dynamicTypeWithUpperBound = dynamicType.asDynamicTypeWithUpperBound();
TypeElement typeElement = type.toTypeElement(appView, dynamicType.getNullability());