Remove hack to support Cts test
Cts test updated in https://android-review.googlesource.com/2937060
Fixes: b/322478366
Change-Id: I9422659f011876b7fb94cbcd6a43727ea898813f
diff --git a/src/main/java/com/android/tools/r8/ir/code/NewArrayEmpty.java b/src/main/java/com/android/tools/r8/ir/code/NewArrayEmpty.java
index a7c3397..1bd40d4 100644
--- a/src/main/java/com/android/tools/r8/ir/code/NewArrayEmpty.java
+++ b/src/main/java/com/android/tools/r8/ir/code/NewArrayEmpty.java
@@ -88,11 +88,7 @@
AbstractValueSupplier abstractValueSupplier,
SideEffectAssumption assumption) {
assert type.isArrayType();
- return isArrayTypeInaccessible(appView, context)
- || isArraySizeMaybeNegative()
- // Cts test relying on dead array allocations of size Integer.MAX_VALUE not getting
- // removed See b/322478366.
- || (appView.options().debug && sizeIfConst() == Integer.MAX_VALUE);
+ return isArrayTypeInaccessible(appView, context) || isArraySizeMaybeNegative();
}
private boolean isArrayTypeInaccessible(AppView<?> appView, ProgramMethod context) {
diff --git a/src/test/java/com/android/tools/r8/rewrite/arrays/B322478366RegressionTest.java b/src/test/java/com/android/tools/r8/rewrite/arrays/B322478366RegressionTest.java
index d4b1d3d..5ff2b8b 100644
--- a/src/test/java/com/android/tools/r8/rewrite/arrays/B322478366RegressionTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/arrays/B322478366RegressionTest.java
@@ -64,19 +64,20 @@
MethodSubject m1 = inspector.clazz(Main.class).uniqueMethodWithOriginalName("m1");
assertEquals(0, m1.streamInstructions().filter(InstructionSubject::isNewArray).count());
MethodSubject m2 = inspector.clazz(Main.class).uniqueMethodWithOriginalName("m2");
- // TODO(b/322478366): Cts test CtsPerfettoTestCases.HeapprofdJavaCtsTest#DebuggableAppOom
- // requires that the array allocation stays.
- assertEquals(
- mode.isDebug() ? 1 : 0,
- m2.streamInstructions().filter(InstructionSubject::isNewArray).count());
+ assertEquals(0, m2.streamInstructions().filter(InstructionSubject::isNewArray).count());
MethodSubject m3 = inspector.clazz(Main.class).uniqueMethodWithOriginalName("m3");
assertEquals(
mode.isDebug() ? 1 : 0,
m3.streamInstructions().filter(InstructionSubject::isNewArray).count());
+ MethodSubject m4 = inspector.clazz(Main.class).uniqueMethodWithOriginalName("m4");
+ assertEquals(
+ mode.isDebug() ? 1 : 0,
+ m4.streamInstructions().filter(InstructionSubject::isNewArray).count());
} else {
assertThat(inspector.clazz(Main.class).uniqueMethodWithOriginalName("m1"), isAbsent());
assertThat(inspector.clazz(Main.class).uniqueMethodWithOriginalName("m2"), isAbsent());
assertThat(inspector.clazz(Main.class).uniqueMethodWithOriginalName("m3"), isAbsent());
+ assertThat(inspector.clazz(Main.class).uniqueMethodWithOriginalName("m4"), isAbsent());
}
}
@@ -110,10 +111,22 @@
}
}
+ @NeverInline
+ public static void m4() {
+ try {
+ byte[] bytes = new byte[Integer.MAX_VALUE];
+ // Local information from javac for bytes, as the return statement makes it observable
+ // in a debugger.
+ return;
+ } catch (OutOfMemoryError e) {
+ }
+ }
+
public static void main(String[] args) {
m1();
m2();
m3();
+ m4();
}
}
}