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:
|
||||
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);
|
||||
|
@ -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);
|
||||
}
|
@ -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…
Reference in New Issue
Block a user