Version 2.0.60

Cherry-pick: Fix NPE in BackportedMethodRewriter
CL: https://r8-review.googlesource.com/c/r8/+/50142

Bug: 152702950
Change-Id: I58b576926af203dd2c4aadd43077e9568c49fd6e
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index c309cc4..287e402 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
 
   // This field is accessed from release scripts using simple pattern matching.
   // Therefore, changing this field could break our release scripts.
-  public static final String LABEL = "2.0.59";
+  public static final String LABEL = "2.0.60";
 
   private Version() {
   }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/backports/NumericMethodRewrites.java b/src/main/java/com/android/tools/r8/ir/desugar/backports/NumericMethodRewrites.java
index 86d7494..f0aece7 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/backports/NumericMethodRewrites.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/backports/NumericMethodRewrites.java
@@ -32,8 +32,11 @@
       DexItemFactory factory) {
     List<Value> values = invoke.inValues();
     assert values.size() == 1;
-    invoke.outValue().replaceUsers(values.get(0));
-    iterator.remove();
+    if (invoke.hasOutValue()) {
+      invoke.outValue().replaceUsers(values.get(0));
+    }
+    // TODO(b/152853271): Debugging information is lost here (DebugLocalWrite may be required).
+    iterator.removeOrReplaceByDebugLocalRead();
   }
 
   private NumericMethodRewrites() {
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/ByteBackportTest.java b/src/test/java/com/android/tools/r8/desugar/backports/ByteBackportTest.java
index 13a4564..e92fcc7 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/ByteBackportTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/ByteBackportTest.java
@@ -21,8 +21,8 @@
 
   public ByteBackportTest(TestParameters parameters) {
     super(parameters, Byte.class, Main.class);
-    registerTarget(AndroidApiLevel.O, 16);
-    registerTarget(AndroidApiLevel.N, 8);
+    registerTarget(AndroidApiLevel.O, 17);
+    registerTarget(AndroidApiLevel.N, 9);
     registerTarget(AndroidApiLevel.K, 7);
   }
 
@@ -34,10 +34,13 @@
       testToUnsignedLong();
     }
 
+    @SuppressWarnings("ResultOfMethodCallIgnored")
     private static void testHashCode() {
       for (int i = Byte.MIN_VALUE; i < Byte.MAX_VALUE; i++) {
         assertEquals(i, Byte.hashCode((byte) i));
       }
+      // Test unused invoke.
+      Byte.hashCode((byte) 1);
     }
 
     private static void testCompare() {