Something like this:
String[] foo = (String[]) java.lang.reflect.Array.newInstance(String[].class.getComponentType(), 1);
... is emitted by javac as:
11: iconst_1
12: invokestatic #8 // Method java/lang/reflect/Array.newInstance:(Ljava/lang/Class;I)Ljava/lang/Object;
15: checkcast #6 // class "[Ljava/lang/String;"
18: checkcast #6 // class "[Ljava/lang/String;"
21: astore_1
I expect to see only one checkcast here.
Related(?) issue in java.util.Arrays.deepHashCode, where something like
if (element instanceof Object[])
elementHash = deepHashCode((Object[]) element);
appears to be translated to:
33: instanceof #54 // class "[Ljava/lang/Object;"
36: ifeq 55
39: aload 5
41: checkcast #54 // class "[Ljava/lang/Object;"
44: checkcast #54 // class "[Ljava/lang/Object;"
47: invokestatic #106 // Method deepHashCode:([Ljava/lang/Object;)I
50: istore 6
52: goto 259
Duplicate checkcast, and perhaps these are both unnecessary due the preceding instanceof
String[] foo = (String[]) java.lang.reflect.Array.newInstance(String[].class.getComponentType(), 1);
... is emitted by javac as:
11: iconst_1
12: invokestatic #8 // Method java/lang/reflect/Array.newInstance:(Ljava/lang/Class;I)Ljava/lang/Object;
15: checkcast #6 // class "[Ljava/lang/String;"
18: checkcast #6 // class "[Ljava/lang/String;"
21: astore_1
I expect to see only one checkcast here.
Related(?) issue in java.util.Arrays.deepHashCode, where something like
if (element instanceof Object[])
elementHash = deepHashCode((Object[]) element);
appears to be translated to:
33: instanceof #54 // class "[Ljava/lang/Object;"
36: ifeq 55
39: aload 5
41: checkcast #54 // class "[Ljava/lang/Object;"
44: checkcast #54 // class "[Ljava/lang/Object;"
47: invokestatic #106 // Method deepHashCode:([Ljava/lang/Object;)I
50: istore 6
52: goto 259
Duplicate checkcast, and perhaps these are both unnecessary due the preceding instanceof
- duplicates
-
JDK-8067914 Redundant type cast nodes in AST (follow up from JDK-8043741)
-
- Closed
-