Update FilledNewArray test expectations
Bug: b/293501981
Change-Id: Ic9e62aa64cf8fef177d558bad745a6d474fb0fda
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java
index 03da617..6eface6 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java
@@ -395,14 +395,16 @@
if (!elementType.isClassType()) {
return null;
}
- DexProgramClass clazz = null;
- if (appView.enableWholeProgramOptimizations()) {
- clazz = asProgramClassOrNull(appView.definitionFor(elementType, code.context()));
- } else if (elementType == code.context().getHolderType()) {
- clazz = code.context().getHolder();
- }
- if (clazz == null || !clazz.isFinal()) {
- return null;
+ if (elementType != dexItemFactory.stringType) {
+ DexProgramClass clazz = null;
+ if (appView.enableWholeProgramOptimizations()) {
+ clazz = asProgramClassOrNull(appView.definitionFor(elementType, code.context()));
+ } else if (elementType == code.context().getHolderType()) {
+ clazz = code.context().getHolder();
+ }
+ if (clazz == null || !clazz.isFinal()) {
+ return null;
+ }
}
}
return new FilledArrayCandidate(newArrayEmpty, size, encodeAsFilledNewArray);
diff --git a/src/test/java/com/android/tools/r8/TestParameters.java b/src/test/java/com/android/tools/r8/TestParameters.java
index 76f237b..7ca196a 100644
--- a/src/test/java/com/android/tools/r8/TestParameters.java
+++ b/src/test/java/com/android/tools/r8/TestParameters.java
@@ -117,7 +117,7 @@
}
public boolean canUseSubTypesInFilledNewArray() {
- return isDexRuntime() && getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U);
+ return isDexRuntime() && getApiLevel().isGreaterThan(AndroidApiLevel.U);
}
public boolean isAccessModificationEnabled(boolean allowAccessModification) {
diff --git a/src/test/java/com/android/tools/r8/rewrite/arrays/FilledArrayDataRemoveCheckCastTest.java b/src/test/java/com/android/tools/r8/rewrite/arrays/FilledArrayDataRemoveCheckCastTest.java
index 71639f7..fe36c6d 100644
--- a/src/test/java/com/android/tools/r8/rewrite/arrays/FilledArrayDataRemoveCheckCastTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/arrays/FilledArrayDataRemoveCheckCastTest.java
@@ -6,7 +6,7 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -65,13 +65,8 @@
.streamInstructions()
.filter(InstructionSubject::isFilledNewArray)
.findFirst();
- assertEquals(
- parameters.canUseFilledNewArrayOnNonStringObjects(),
- filledNewArrayInIterateBaseClasses.isPresent());
- assertEquals(
- parameters.canUseFilledNewArrayOnNonStringObjects()
- && parameters.canUseSubTypesInFilledNewArray(),
- filledNewArrayInIterateSubClasses.isPresent());
+ assertFalse(filledNewArrayInIterateBaseClasses.isPresent());
+ assertFalse(filledNewArrayInIterateSubClasses.isPresent());
});
}
diff --git a/src/test/java/com/android/tools/r8/rewrite/arrays/SimplifyArrayConstructionTest.java b/src/test/java/com/android/tools/r8/rewrite/arrays/SimplifyArrayConstructionTest.java
index 9f67d23..89cb1a6 100644
--- a/src/test/java/com/android/tools/r8/rewrite/arrays/SimplifyArrayConstructionTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/arrays/SimplifyArrayConstructionTest.java
@@ -248,7 +248,7 @@
objectArraysFilledNewArrayRange, DexFilledNewArrayRange.class, DexNewArray.class);
if (parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.L)) {
- assertArrayTypes(twoDimensionalArrays, DexFilledNewArray.class);
+ assertArrayPuts(twoDimensionalArrays);
} else {
// No need to assert this case. If it's wrong, Dalvik verify errors cause test failures.
}
@@ -301,6 +301,15 @@
assertEquals(numNewArray, numFillArray);
}
+ public static void assertArrayPuts(MethodSubject method) {
+ assertTrue(method.isPresent());
+ List<Class<?>> disallowedClasses = Lists.newArrayList(DEX_ARRAY_INSTRUCTIONS);
+ disallowedClasses.remove(DexNewArray.class);
+ assertTrue(method.streamInstructions().noneMatch(isInstruction(disallowedClasses)));
+ assertTrue(method.streamInstructions().anyMatch(InstructionSubject::isNewArray));
+ assertTrue(method.streamInstructions().anyMatch(InstructionSubject::isArrayPut));
+ }
+
public static final class Main {
static final String assumedNonNullField = null;
static final String assumedNullField = null;