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() {