Merge "Guard check-cast elimination when in-value is null constant"
diff --git a/src/test/java/com/android/tools/r8/deadcode/RemoveDeadArray.java b/src/test/java/com/android/tools/r8/deadcode/RemoveDeadArray.java
index 5de7de0..b522155 100644
--- a/src/test/java/com/android/tools/r8/deadcode/RemoveDeadArray.java
+++ b/src/test/java/com/android/tools/r8/deadcode/RemoveDeadArray.java
@@ -66,10 +66,9 @@
             .compile();
     CodeInspector inspector = result.inspector();
     assertFalse(inspector.clazz(TestClass.class).clinit().isPresent());
-
     MethodSubject main = inspector.clazz(TestClass.class).mainMethod();
-    main.streamInstructions().noneMatch(instructionSubject -> instructionSubject.isNewArray());
-    assertFalse(main.getMethod().getCode().asDexCode().toString().contains("NewArray"));
+    assertTrue(
+        main.streamInstructions().noneMatch(instructionSubject -> instructionSubject.isNewArray()));
     runOnArt(result.app, TestClass.class.getName());
  }
 
@@ -83,10 +82,8 @@
     CodeInspector inspector = result.inspector();
     MethodSubject clinit = inspector.clazz(TestClassWithCatch.class).clinit();
     assertTrue(clinit.isPresent());
-    // Ensure that our optimization does not hit, we should still have 4 Aput instructions.
-    long aPutCount = Arrays.stream(clinit.getMethod().getCode().asDexCode().instructions)
-        .filter(instruction -> instruction instanceof  Aput)
-        .count();
-    assertEquals(4, aPutCount);
+    // Ensure that our optimization does not hit, we should still have 4 ArrayPut instructions.
+    long count = clinit.streamInstructions().filter(a -> a.isArrayPut()).count();
+    assertEquals(4, count);
   }
 }
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
index 375f0b5..93a1c37 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
@@ -6,6 +6,7 @@
 
 
 import com.android.tools.r8.cf.code.CfArithmeticBinop;
+import com.android.tools.r8.cf.code.CfArrayStore;
 import com.android.tools.r8.cf.code.CfCheckCast;
 import com.android.tools.r8.cf.code.CfConstClass;
 import com.android.tools.r8.cf.code.CfConstNull;
@@ -286,6 +287,11 @@
   }
 
   @Override
+  public boolean isArrayPut() {
+    return instruction instanceof CfArrayStore;
+  }
+
+  @Override
   public int size() {
     // TODO(b/122302789): CfInstruction#getSize()
     throw new UnsupportedOperationException("CfInstruction doesn't have size yet.");
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionSubject.java
index e2e801e..c9b7ee5 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionSubject.java
@@ -4,6 +4,7 @@
 
 package com.android.tools.r8.utils.codeinspector;
 
+import com.android.tools.r8.code.Aput;
 import com.android.tools.r8.code.CheckCast;
 import com.android.tools.r8.code.Const;
 import com.android.tools.r8.code.Const16;
@@ -366,6 +367,11 @@
   }
 
   @Override
+  public boolean isArrayPut() {
+    return instruction instanceof Aput;
+  }
+
+  @Override
   public boolean isMonitorEnter() {
     return instruction instanceof MonitorEnter;
   }
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/InstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/InstructionSubject.java
index dd5af7c..0528185 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/InstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/InstructionSubject.java
@@ -84,6 +84,8 @@
 
   boolean isNewArray();
 
+  boolean isArrayPut();
+
   boolean isMonitorEnter();
 
   boolean isMonitorExit();