Fix assertion error due to primitive or null value after enum unboxing

Change-Id: I04ceb80293bf84bf2ed379f1e9c5a269e0f8f166
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/value/NullOrAbstractValue.java b/src/main/java/com/android/tools/r8/ir/analysis/value/NullOrAbstractValue.java
index 6eaf130..85534f3 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/value/NullOrAbstractValue.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/value/NullOrAbstractValue.java
@@ -14,6 +14,7 @@
   private final AbstractValue value;
 
   private NullOrAbstractValue(AbstractValue value) {
+    assert !value.isSingleNumberValue();
     this.value = value;
   }
 
@@ -44,9 +45,14 @@
   }
 
   @Override
-  public NullOrAbstractValue rewrittenWithLens(
+  public AbstractValue rewrittenWithLens(
       AppView<AppInfoWithLiveness> appView, DexType newType, GraphLens lens, GraphLens codeLens) {
-    return new NullOrAbstractValue(value.rewrittenWithLens(appView, newType, lens, codeLens));
+    AbstractValue rewrittenValue = value.rewrittenWithLens(appView, newType, lens, codeLens);
+    if (rewrittenValue.isSingleNumberValue()) {
+      // Reference type rewritten to primitive.
+      return unknown();
+    }
+    return new NullOrAbstractValue(rewrittenValue);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/MutableFieldOptimizationInfo.java b/src/main/java/com/android/tools/r8/ir/optimize/info/MutableFieldOptimizationInfo.java
index 21fca73..9617c85 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/MutableFieldOptimizationInfo.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/MutableFieldOptimizationInfo.java
@@ -67,7 +67,10 @@
   }
 
   private MutableFieldOptimizationInfo setAbstractValue(AbstractValue abstractValue) {
-    assert getAbstractValue().isUnknown() || abstractValue.isNonTrivial();
+    assert getAbstractValue().isUnknown()
+        || abstractValue.isNonTrivial()
+        || (getAbstractValue().isNullOrAbstractValue()
+            && getAbstractValue().asNullOrAbstractValue().getNonNullValue().isSingleFieldValue());
     this.abstractValue = abstractValue;
     return this;
   }