Enum unboxing and test fix after enabling constructor inlining
Change-Id: I51278c124c2625867fdb890c75176c1046d3ac11
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
index c570ab9..1ff0a10 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
@@ -1379,14 +1379,21 @@
// e == MyEnum.X
TypeElement leftType = theIf.lhs().getType();
TypeElement rightType = theIf.rhs().getType();
- if (leftType.equalUpToNullability(rightType)) {
- assert leftType.isClassType();
- assert leftType.asClassType().getClassType() == enumClass.type;
+ if (isEqualEnumCandidateType(leftType, rightType, enumClass)) {
return Reason.ELIGIBLE;
}
return Reason.INVALID_IF_TYPES;
}
+ private boolean isEqualEnumCandidateType(
+ TypeElement leftType, TypeElement rightType, DexProgramClass enumClass) {
+ if (!leftType.isClassType() || !rightType.isClassType()) {
+ return false;
+ }
+ return getEnumUnboxingCandidateOrNull(leftType) == enumClass
+ && getEnumUnboxingCandidateOrNull(rightType) == enumClass;
+ }
+
@SuppressWarnings({"ReferenceEquality", "UnusedVariable"})
private Reason analyzeInstanceGetUser(
InstanceGet instanceGet,
diff --git a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
index 86f4fd6..c0211ef 100644
--- a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
@@ -252,8 +252,7 @@
.apply(this::suppressZipFileAssignmentsToJavaLangAutoCloseable)
.compile()
.graphInspector();
- assertRetainedClassesEqual(
- referenceInspector, ifThenKeepClassesWithMembersInspector, true, true);
+ assertRetainedClassesEqual(referenceInspector, ifThenKeepClassesWithMembersInspector);
GraphInspector ifHasMemberThenKeepClassInspector =
testForR8(Backend.CF)
@@ -274,7 +273,7 @@
.apply(this::suppressZipFileAssignmentsToJavaLangAutoCloseable)
.compile()
.graphInspector();
- assertRetainedClassesEqual(referenceInspector, ifHasMemberThenKeepClassInspector, true, true);
+ assertRetainedClassesEqual(referenceInspector, ifHasMemberThenKeepClassInspector);
}
private void configureHorizontalClassMerging(R8FullTestBuilder testBuilder) {