# HG changeset patch # User mcimadamore # Date 1224848811 -3600 # Node ID a64c289fe41356c71b914e495d923814cae8c578 # Parent e923a41e84cc2d513708a54f34ff6c9cd85ad703 6762569: Javac crashes with AssertionError in Types.containedBy Summary: Types.containedBy should be more liberal with UndetVars Reviewed-by: jjg diff -r e923a41e84cc -r a64c289fe413 langtools/src/share/classes/com/sun/tools/javac/code/Types.java --- a/langtools/src/share/classes/com/sun/tools/javac/code/Types.java Fri Oct 24 12:46:34 2008 +0100 +++ b/langtools/src/share/classes/com/sun/tools/javac/code/Types.java Fri Oct 24 12:46:51 2008 +0100 @@ -709,16 +709,13 @@ 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); diff -r e923a41e84cc -r a64c289fe413 langtools/test/tools/javac/generics/wildcards/6651719/T6651719b.java --- a/langtools/test/tools/javac/generics/wildcards/6651719/T6651719b.java Fri Oct 24 12:46:34 2008 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* - * 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 6651719 - * @summary Compiler crashes possibly during forward reference of TypeParameter - * @compile T6651719b.java - */ -import java.util.*; - -public class T6651719b { - void m(T t, List> list) {} - void test(List> list) { - m("", list); - } -} diff -r e923a41e84cc -r a64c289fe413 langtools/test/tools/javac/generics/wildcards/6762569/T6762569a.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/generics/wildcards/6762569/T6762569a.java Fri Oct 24 12:46:51 2008 +0100 @@ -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 T6762569a.java + */ +import java.util.*; + +class T6762569a { + void m(T t, List> list) {} + + void test(List> list) { + m("", list); + } +} diff -r e923a41e84cc -r a64c289fe413 langtools/test/tools/javac/generics/wildcards/6762569/T6762569b.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/generics/wildcards/6762569/T6762569b.java Fri Oct 24 12:46:51 2008 +0100 @@ -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 { + void m(T t, List> list) {} + + void test(List> list) { + m("", list); + } +}