Wed, 17 Jul 2013 14:14:49 +0100
7041019: Bogus type-variable substitution with array types with dependencies on accessibility check
Summary: call to upperBound() when performing type-variable substitution on element type leads to unsoundness
Reviewed-by: jjg
mcimadamore@970 | 1 | /* |
mcimadamore@970 | 2 | * @test /nodynamiccopyright/ |
mcimadamore@1901 | 3 | * @bug 7034511 7040883 7041019 |
mcimadamore@970 | 4 | * @summary Loophole in typesafety |
mcimadamore@970 | 5 | * @compile/fail/ref=T7034511a.out -XDrawDiagnostics T7034511a.java |
mcimadamore@970 | 6 | */ |
mcimadamore@970 | 7 | |
mcimadamore@970 | 8 | class T7034511a { |
mcimadamore@970 | 9 | |
mcimadamore@970 | 10 | interface A<T> { |
mcimadamore@970 | 11 | void foo(T x); |
mcimadamore@970 | 12 | } |
mcimadamore@970 | 13 | |
mcimadamore@970 | 14 | interface B<T> extends A<T[]> { } |
mcimadamore@970 | 15 | |
mcimadamore@970 | 16 | static abstract class C implements B<Integer> { |
mcimadamore@970 | 17 | <T extends B<?>> void test(T x, String[] ss) { |
mcimadamore@970 | 18 | x.foo(ss); |
mcimadamore@970 | 19 | } |
mcimadamore@970 | 20 | } |
mcimadamore@970 | 21 | } |