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()); + } }