Revert fix dynamicType in fixClassType change
Change-Id: I7234747840fcb3a91ce631ab19aae7b1f467b273
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/MutableMethodOptimizationInfo.java b/src/main/java/com/android/tools/r8/ir/optimize/info/MutableMethodOptimizationInfo.java
index aec188b..2a33935 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/MutableMethodOptimizationInfo.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/MutableMethodOptimizationInfo.java
@@ -13,7 +13,9 @@
import com.android.tools.r8.graph.lens.GraphLens;
import com.android.tools.r8.ir.analysis.inlining.NeverSimpleInliningConstraint;
import com.android.tools.r8.ir.analysis.inlining.SimpleInliningConstraint;
+import com.android.tools.r8.ir.analysis.type.ClassTypeElement;
import com.android.tools.r8.ir.analysis.type.DynamicType;
+import com.android.tools.r8.ir.analysis.type.DynamicTypeWithUpperBound;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.analysis.value.AbstractValue;
import com.android.tools.r8.ir.analysis.value.UnknownValue;
@@ -183,14 +185,30 @@
public MutableMethodOptimizationInfo fixupClassTypeReferences(
AppView<AppInfoWithLiveness> appView, GraphLens lens, Set<DexType> prunedTypes) {
DynamicType rewrittenDynamicType = dynamicType.rewrittenWithLens(appView, lens, prunedTypes);
- assert !(rewrittenDynamicType.hasDynamicUpperBoundType()
- && rewrittenDynamicType
- .asDynamicTypeWithUpperBound()
- .getDynamicUpperBoundType()
- .isPrimitiveType());
+ if (rewrittenDynamicType.hasDynamicUpperBoundType()) {
+ DynamicTypeWithUpperBound rewrittenDynamicTypeWithUpperBound =
+ rewrittenDynamicType.asDynamicTypeWithUpperBound();
+ if (rewrittenDynamicTypeWithUpperBound.getDynamicUpperBoundType().isPrimitiveType()) {
+ // Do not store primitive dynamic types.
+ assert verifyDynamicTypeIsUnboxedEnum(appView, dynamicType);
+ return unsetDynamicType();
+ }
+ }
return setDynamicType(rewrittenDynamicType);
}
+ private static boolean verifyDynamicTypeIsUnboxedEnum(
+ AppView<?> appView, DynamicType dynamicType) {
+ assert dynamicType.isDynamicTypeWithUpperBound();
+ DynamicTypeWithUpperBound dynamicTypeWithUpperBound = dynamicType.asDynamicTypeWithUpperBound();
+ TypeElement dynamicUpperBoundType = dynamicTypeWithUpperBound.getDynamicUpperBoundType();
+ assert dynamicUpperBoundType.isClassType();
+ ClassTypeElement dynamicUpperBoundClassType = dynamicUpperBoundType.asClassType();
+ assert appView.hasUnboxedEnums();
+ assert appView.unboxedEnums().isUnboxedEnum(dynamicUpperBoundClassType.getClassType());
+ return true;
+ }
+
public MutableMethodOptimizationInfo fixupAbstractReturnValue(
AppView<AppInfoWithLiveness> appView,
DexEncodedMethod method,