6762569: Javac crashes with AssertionError in Types.containedBy

Types.containedBy should be more liberal with UndetVars

Reviewed-by: jjg
This commit is contained in:
Maurizio Cimadamore 2008-10-24 12:46:51 +01:00
parent 418461fae2
commit a21aaaa7dc
3 changed files with 49 additions and 13 deletions

View File

@ -709,16 +709,13 @@ public class Types {
case UNDETVAR:
if (s.tag == WILDCARD) {
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);
// 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;
} else {
return isSameType(t, s);

View File

@ -23,14 +23,15 @@
/*
* @test
* @bug 6651719
* @summary Compiler crashes possibly during forward reference of TypeParameter
* @compile T6651719b.java
* @bug 6762569
* @summary Javac crashes with AssertionError in Types.containedBy
* @compile T6762569a.java
*/
import java.util.*;
public class T6651719b {
class T6762569a {
<T> void m(T t, List<? super List<T>> list) {}
void test(List<? super List<?>> list) {
m("", list);
}

View File

@ -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);
}
}