6762569: Javac crashes with AssertionError in Types.containedBy
Types.containedBy should be more liberal with UndetVars Reviewed-by: jjg
This commit is contained in:
parent
418461fae2
commit
a21aaaa7dc
@ -709,16 +709,13 @@ public class Types {
|
|||||||
case UNDETVAR:
|
case UNDETVAR:
|
||||||
if (s.tag == WILDCARD) {
|
if (s.tag == WILDCARD) {
|
||||||
UndetVar undetvar = (UndetVar)t;
|
UndetVar undetvar = (UndetVar)t;
|
||||||
|
|
||||||
// Because of wildcard capture, s must be on the left
|
|
||||||
// hand side of an assignment. Furthermore, t is an
|
|
||||||
// underconstrained type variable, for example, one
|
|
||||||
// that is only used in the return type of a method.
|
|
||||||
// If the type variable is truly underconstrained, it
|
|
||||||
// cannot have any low bounds:
|
|
||||||
assert undetvar.lobounds.isEmpty() : undetvar;
|
|
||||||
|
|
||||||
undetvar.inst = glb(upperBound(s), undetvar.inst);
|
undetvar.inst = glb(upperBound(s), undetvar.inst);
|
||||||
|
// We should check instantiated type against any of the
|
||||||
|
// undetvar's lower bounds.
|
||||||
|
for (Type t2 : undetvar.lobounds) {
|
||||||
|
if (!isSubtype(t2, undetvar.inst))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return isSameType(t, s);
|
return isSameType(t, s);
|
||||||
|
@ -23,14 +23,15 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* @test
|
* @test
|
||||||
* @bug 6651719
|
* @bug 6762569
|
||||||
* @summary Compiler crashes possibly during forward reference of TypeParameter
|
* @summary Javac crashes with AssertionError in Types.containedBy
|
||||||
* @compile T6651719b.java
|
* @compile T6762569a.java
|
||||||
*/
|
*/
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class T6651719b {
|
class T6762569a {
|
||||||
<T> void m(T t, List<? super List<T>> list) {}
|
<T> void m(T t, List<? super List<T>> list) {}
|
||||||
|
|
||||||
void test(List<? super List<?>> list) {
|
void test(List<? super List<?>> list) {
|
||||||
m("", list);
|
m("", list);
|
||||||
}
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||||
|
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||||
|
* have any questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 6762569
|
||||||
|
* @summary Javac crashes with AssertionError in Types.containedBy
|
||||||
|
* @compile/fail T6762569b.java
|
||||||
|
*/
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
class T6762569b {
|
||||||
|
<T> void m(T t, List<? super List<T>> list) {}
|
||||||
|
|
||||||
|
void test(List<? super List<? extends Number>> list) {
|
||||||
|
m("", list);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user