7005671: Regression: compiler accepts invalid cast from X[] to primitive array

Fri, 10 Dec 2010 15:23:42 +0000

author
mcimadamore
date
Fri, 10 Dec 2010 15:23:42 +0000
changeset 786
2ca5866a8dfb
parent 785
65820d0d4a97
child 787
b1c98bfd4709

7005671: Regression: compiler accepts invalid cast from X[] to primitive array
Summary: regression in type conversion after 292 changes
Reviewed-by: jjg

src/share/classes/com/sun/tools/javac/code/Types.java file | annotate | diff | comparison | revisions
test/tools/javac/cast/7005671/T7005671.java file | annotate | diff | comparison | revisions
test/tools/javac/cast/7005671/T7005671.out file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/classes/com/sun/tools/javac/code/Types.java	Thu Dec 09 19:53:03 2010 -0800
     1.2 +++ b/src/share/classes/com/sun/tools/javac/code/Types.java	Fri Dec 10 15:23:42 2010 +0000
     1.3 @@ -1080,7 +1080,8 @@
     1.4                  case CLASS:
     1.5                      return isSubtype(t, s);
     1.6                  case ARRAY:
     1.7 -                    if (elemtype(t).tag <= lastBaseTag) {
     1.8 +                    if (elemtype(t).tag <= lastBaseTag ||
     1.9 +                            elemtype(s).tag <= lastBaseTag) {
    1.10                          return elemtype(t).tag == elemtype(s).tag;
    1.11                      } else {
    1.12                          return visit(elemtype(t), elemtype(s));
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/test/tools/javac/cast/7005671/T7005671.java	Fri Dec 10 15:23:42 2010 +0000
     2.3 @@ -0,0 +1,32 @@
     2.4 +/*
     2.5 + * @test /nodynamiccopyright/
     2.6 + * @author mcimadamore
     2.7 + * @bug     7005671
     2.8 + * @summary Regression: compiler accepts invalid cast from X[] to primitive array
     2.9 + * @compile/fail/ref=T7005671.out -XDrawDiagnostics T7005671.java
    2.10 + */
    2.11 +
    2.12 +class T7005671<X> {
    2.13 +
    2.14 +    void test1() {
    2.15 +        Object o1 = (X[])(byte[])null;
    2.16 +        Object o2 = (X[])(short[])null;
    2.17 +        Object o3 = (X[])(int[])null;
    2.18 +        Object o4 = (X[])(long[])null;
    2.19 +        Object o5 = (X[])(float[])null;
    2.20 +        Object o6 = (X[])(double[])null;
    2.21 +        Object o7 = (X[])(char[])null;
    2.22 +        Object o8 = (X[])(boolean[])null;
    2.23 +    }
    2.24 +
    2.25 +    void test2() {
    2.26 +        Object o1 = (byte[])(X[])null;
    2.27 +        Object o2 = (short[])(X[])null;
    2.28 +        Object o3 = (int[])(X[])null;
    2.29 +        Object o4 = (long[])(X[])null;
    2.30 +        Object o5 = (float[])(X[])null;
    2.31 +        Object o6 = (double[])(X[])null;
    2.32 +        Object o7 = (char[])(X[])null;
    2.33 +        Object o8 = (boolean[])(X[])null;
    2.34 +    }
    2.35 +}
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/test/tools/javac/cast/7005671/T7005671.out	Fri Dec 10 15:23:42 2010 +0000
     3.3 @@ -0,0 +1,17 @@
     3.4 +T7005671.java:12:26: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), byte[], X[]
     3.5 +T7005671.java:13:26: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), short[], X[]
     3.6 +T7005671.java:14:26: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), int[], X[]
     3.7 +T7005671.java:15:26: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), long[], X[]
     3.8 +T7005671.java:16:26: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), float[], X[]
     3.9 +T7005671.java:17:26: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), double[], X[]
    3.10 +T7005671.java:18:26: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), char[], X[]
    3.11 +T7005671.java:19:26: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), boolean[], X[]
    3.12 +T7005671.java:23:29: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), X[], byte[]
    3.13 +T7005671.java:24:30: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), X[], short[]
    3.14 +T7005671.java:25:28: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), X[], int[]
    3.15 +T7005671.java:26:29: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), X[], long[]
    3.16 +T7005671.java:27:30: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), X[], float[]
    3.17 +T7005671.java:28:31: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), X[], double[]
    3.18 +T7005671.java:29:29: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), X[], char[]
    3.19 +T7005671.java:30:32: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), X[], boolean[]
    3.20 +16 errors

mercurial