8214345: infinite recursion while checking super class
Reviewed-by: vromero
This commit is contained in:
parent
09fda3d6e9
commit
454cbfacaa
src/jdk.compiler/share/classes/com/sun/tools/javac/comp
test/langtools/tools/javac/generics
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2019, Oracle and/or its affiliates. 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
|
||||
@ -2712,6 +2712,8 @@ public class Check {
|
||||
if (type.isErroneous()) return;
|
||||
for (List<Type> l = types.interfaces(type); l.nonEmpty(); l = l.tail) {
|
||||
Type it = l.head;
|
||||
if (type.hasTag(CLASS) && !it.hasTag(CLASS)) continue; // JLS 8.1.5
|
||||
|
||||
Type oldit = seensofar.put(it.tsym, it);
|
||||
if (oldit != null) {
|
||||
List<Type> oldparams = oldit.allparams();
|
||||
@ -2725,6 +2727,7 @@ public class Check {
|
||||
checkClassBounds(pos, seensofar, it);
|
||||
}
|
||||
Type st = types.supertype(type);
|
||||
if (type.hasTag(CLASS) && !st.hasTag(CLASS)) return; // JLS 8.1.4
|
||||
if (st != Type.noType) checkClassBounds(pos, seensofar, st);
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,12 @@
|
||||
/*
|
||||
* @test /nodynamiccopyright/
|
||||
* @bug 8214345
|
||||
* @summary infinite recursion while checking super class
|
||||
*
|
||||
* @compile/fail/ref=ClassBoundCheckingOverflow.out -XDrawDiagnostics ClassBoundCheckingOverflow.java
|
||||
*/
|
||||
|
||||
public class ClassBoundCheckingOverflow {
|
||||
abstract class InfiniteLoop1<E extends InfiniteLoop1<E>> extends E {}
|
||||
abstract class InfiniteLoop2<E extends InfiniteLoop2<E>> implements E {}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
ClassBoundCheckingOverflow.java:10:70: compiler.err.type.found.req: (compiler.misc.type.parameter: E), (compiler.misc.type.req.class)
|
||||
ClassBoundCheckingOverflow.java:11:73: compiler.err.type.found.req: (compiler.misc.type.parameter: E), (compiler.misc.type.req.class)
|
||||
2 errors
|
Loading…
x
Reference in New Issue
Block a user