Fix invalid removal of value used in phi
Bug: b/354625681
Change-Id: I8b3ccd82d6261814fad8b2b1d1ab552efb373cb7
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/FilledNewArrayRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/FilledNewArrayRewriter.java
index eb90225..c5e7aaa 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/FilledNewArrayRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/FilledNewArrayRewriter.java
@@ -110,7 +110,7 @@
next.inValues()
.forEach(
value -> {
- if (value.hasSingleUniqueUser()) {
+ if (value.hasSingleUniqueUser() && !value.hasPhiUsers()) {
additionalToRemove.add(value.getDefinition());
}
});
diff --git a/src/test/java/com/android/tools/r8/regress/B354625681Test.java b/src/test/java/com/android/tools/r8/regress/B354625681Test.java
index ca6025d..338ca7f 100644
--- a/src/test/java/com/android/tools/r8/regress/B354625681Test.java
+++ b/src/test/java/com/android/tools/r8/regress/B354625681Test.java
@@ -6,10 +6,8 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.utils.AndroidApiLevel;
import com.google.common.collect.ImmutableList;
import java.util.List;
-import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -39,26 +37,12 @@
@Test
public void testR8() throws Exception {
- if (parameters.isCfRuntime()
- || (parameters.isDexRuntime()
- && parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.N))) {
- testForR8(parameters.getBackend())
- .addInnerClasses(getClass())
- .addKeepMainRule(TestClass.class)
- .setMinApi(parameters)
- .run(parameters.getRuntime(), TestClass.class)
- .assertSuccessWithOutputLines(EXPECTED_OUTPUT);
- } else {
- Assert.assertThrows(
- Throwable.class,
- () ->
- testForR8(parameters.getBackend())
- .addInnerClasses(getClass())
- .addKeepMainRule(TestClass.class)
- .setMinApi(parameters)
- .run(parameters.getRuntime(), TestClass.class)
- .assertSuccessWithOutputLines(EXPECTED_OUTPUT));
- }
+ testForR8(parameters.getBackend())
+ .addInnerClasses(getClass())
+ .addKeepMainRule(TestClass.class)
+ .setMinApi(parameters)
+ .run(parameters.getRuntime(), TestClass.class)
+ .assertSuccessWithOutputLines(EXPECTED_OUTPUT);
}
static class TestClass {