Fix nondeterminism from join of null-or-abstract-value
Bug: 210841778
Change-Id: I1026db3f8274f9defd1f7b71f5d4b7104ead7ee0
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/value/AbstractValue.java b/src/main/java/com/android/tools/r8/ir/analysis/value/AbstractValue.java
index 850b669..b9d02f9 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/value/AbstractValue.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/value/AbstractValue.java
@@ -211,7 +211,17 @@
if (other.isNull()) {
return NullOrAbstractValue.create(this);
}
+ if (isNullOrAbstractValue() && asNullOrAbstractValue().getNonNullValue().equals(other)) {
+ return this;
+ }
+ if (other.isNullOrAbstractValue()
+ && other.asNullOrAbstractValue().getNonNullValue().equals(this)) {
+ return other;
+ }
+ return unknown();
}
+ assert !isNullOrAbstractValue();
+ assert !other.isNullOrAbstractValue();
if (allowNonConstantNumbers
&& isConstantOrNonConstantNumberValue()
&& other.isConstantOrNonConstantNumberValue()) {
@@ -230,7 +240,7 @@
}
return numberFromSetValueBuilder.build(factory);
}
- return UnknownValue.getInstance();
+ return unknown();
}
public abstract AbstractValue rewrittenWithLens(