Fix removal of live array-puts in presence of Assume instruction

Bug: b/280659987
Change-Id: Ief4e51fcccba7e777f57efe9377ab20e89ca0554
diff --git a/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java b/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java
index c521bf5..a09fa5e 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java
@@ -170,9 +170,13 @@
 
   @Override
   public DeadInstructionResult canBeDeadCode(AppView<?> appView, IRCode code) {
-    return instructionInstanceCanThrow(appView, code.context())
-        ? DeadInstructionResult.notDead()
-        : DeadInstructionResult.deadIfInValueIsDead(array());
+    if (!instructionInstanceCanThrow(appView, code.context())) {
+      Value arrayRoot = array().getAliasedValue();
+      if (arrayRoot.isDefinedByInstructionSatisfying(Instruction::isCreatingArray)) {
+        return DeadInstructionResult.deadIfInValueIsDead(arrayRoot);
+      }
+    }
+    return DeadInstructionResult.notDead();
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayPutsToArrayAliasTest.java b/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayPutsToArrayAliasTest.java
index eabdea5..8bc3bc1 100644
--- a/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayPutsToArrayAliasTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayPutsToArrayAliasTest.java
@@ -43,8 +43,7 @@
         .enableInliningAnnotations()
         .setMinApi(parameters)
         .run(parameters.getRuntime(), Main.class)
-        // TODO(b/280659987): Should succeed with "Hello, world!".
-        .assertSuccessWithOutputLines("Hellonull");
+        .assertSuccessWithOutputLines("Hello, world!");
   }
 
   static class Main {