The following test throws VerifyError in the Split Verifier. But, it should not because arrays of primitive types modeled as int are assignable to each other and so are their arrays. So [Z should be assignable to [B.
Example:
//Main.java
public class Main {
public static void main(String[] args) {
boolean[] booleans = { true, false };
byte[] bytes = Test.castToByteArray(booleans);
System.out.println(bytes[0] + " " + bytes[1]);
}
}
//Test.jasm
super class Test
version 49:0
{
public Method "<init>":"()V"
stack 1 locals 1
{
aload_0;
invokespecial Method java/lang/Object."<init>":"()V";
return;
}
public static Method castToByteArray:"([Z)[B"
stack 1 locals 1
{
aload_0;
areturn;
}
} // end Class Test
Example:
//Main.java
public class Main {
public static void main(String[] args) {
boolean[] booleans = { true, false };
byte[] bytes = Test.castToByteArray(booleans);
System.out.println(bytes[0] + " " + bytes[1]);
}
}
//Test.jasm
super class Test
version 49:0
{
public Method "<init>":"()V"
stack 1 locals 1
{
aload_0;
invokespecial Method java/lang/Object."<init>":"()V";
return;
}
public static Method castToByteArray:"([Z)[B"
stack 1 locals 1
{
aload_0;
areturn;
}
} // end Class Test
- relates to
-
JDK-8131725 4.10.1.2: Clarify array types in verification type system
-
- Closed
-