Run default value analysis when abstract value is not unknown
Fixes: b/358629308
Change-Id: I8d88ab00f33256a9db883287adc4581b126f42bc
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/DefaultFieldValueJoiner.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/DefaultFieldValueJoiner.java
index 294eb8e..5502be2 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/DefaultFieldValueJoiner.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/DefaultFieldValueJoiner.java
@@ -20,6 +20,7 @@
import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteArrayTypeValueState;
import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteClassTypeValueState;
import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcretePrimitiveTypeValueState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteReferenceTypeValueState;
import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteValueState;
import com.android.tools.r8.optimize.argumentpropagation.codescanner.FieldStateCollection;
import com.android.tools.r8.optimize.argumentpropagation.codescanner.NonEmptyValueState;
@@ -95,9 +96,12 @@
if (state.isUnknown()) {
return;
}
- if (state.isReferenceState()
- && state.asReferenceState().getNullability().isNullable()) {
- return;
+ if (state.isReferenceState()) {
+ ConcreteReferenceTypeValueState referenceState = state.asReferenceState();
+ if (referenceState.getDynamicType().getNullability().isNullable()
+ && referenceState.getAbstractValue(appView).isUnknown()) {
+ return;
+ }
}
fieldsOfInterest
.computeIfAbsent(field.getHolder(), ignoreKey(ArrayList::new))