Don't require compatibility of array element types.
R=ager
Bug: 65039701
Change-Id: Ibe0a60a52bb8adf577ad78b381bf528c7838bb64
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/JarState.java b/src/main/java/com/android/tools/r8/ir/conversion/JarState.java
index 03c614a..5d382a3 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/JarState.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/JarState.java
@@ -134,8 +134,7 @@
return (sort == Type.OBJECT && otherSort == Type.ARRAY)
|| (sort == Type.ARRAY && otherSort == Type.OBJECT)
|| (sort == Type.OBJECT && otherSort == Type.OBJECT)
- || (sort == Type.ARRAY && otherSort == Type.ARRAY
- && isReferenceCompatible(getArrayElementType(type), getArrayElementType(other)));
+ || (sort == Type.ARRAY && otherSort == Type.ARRAY);
}
}
diff --git a/src/test/debugTestResources/Locals.java b/src/test/debugTestResources/Locals.java
index 109c43e..56613b3 100644
--- a/src/test/debugTestResources/Locals.java
+++ b/src/test/debugTestResources/Locals.java
@@ -300,6 +300,14 @@
return -1;
}
+ public static String regression65039701(boolean createIntNotLong) {
+ Object a = createIntNotLong ? new int[1] : new long[1];
+ if (a instanceof int []) {
+ ((int [])a)[0] = 0;
+ }
+ return "OK";
+ }
+
public static void main(String[] args) {
noLocals();
unusedLocals();
@@ -318,5 +326,6 @@
argumentLiveAtReturn(-1);
switchRewriteToIfs(1);
switchRewriteToSwitches(1);
+ regression65039701(true);
}
}
diff --git a/src/test/java/com/android/tools/r8/debug/LocalsTest.java b/src/test/java/com/android/tools/r8/debug/LocalsTest.java
index 60db262..926e84a 100644
--- a/src/test/java/com/android/tools/r8/debug/LocalsTest.java
+++ b/src/test/java/com/android/tools/r8/debug/LocalsTest.java
@@ -528,4 +528,22 @@
checkNoLocal("t"),
run());
}
+
+ @Test
+ public void regression65039701() throws Throwable {
+ runDebugTest(
+ "Locals",
+ breakpoint("Locals", "regression65039701"),
+ run(),
+ checkLine(SOURCE_FILE, 304),
+ checkLocal("createIntNotLong", Value.createBoolean(true)),
+ stepOver(),
+ checkLine(SOURCE_FILE, 305),
+ checkLocal("a"),
+ stepOver(),
+ checkLine(SOURCE_FILE, 306),
+ stepOver(),
+ checkLine(SOURCE_FILE, 308),
+ run());
+ }
}