FULL PRODUCT VERSION :
java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux waikin-Satellite-U300 3.2.0-126-generic #169-Ubuntu SMP Fri Mar 31 14:15:21 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
When using a lambda that returns an object that uses generic object into a function, the compiler throws an exception and requests the programmer to file a bug report.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the following code:
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Compile without error or an exception that does not asked to report as a compiler bug
ERROR MESSAGES/STACK TRACES THAT OCCUR :
An exception has occurred in the compiler (9.0.4). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
java.lang.AssertionError: isSameType UNKNOWN
at jdk.compiler/com.sun.tools.javac.code.Types$SameTypeVisitor.visitType(Types.java:1055)
at jdk.compiler/com.sun.tools.javac.code.Types$SameTypeVisitor.visitType(Types.java:1027)
at jdk.compiler/com.sun.tools.javac.code.Type.accept(Type.java:214)
at jdk.compiler/com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4614)
at jdk.compiler/com.sun.tools.javac.code.Types.isSameType(Types.java:1024)
at jdk.compiler/com.sun.tools.javac.code.Types.isSameType(Types.java:1019)
at jdk.compiler/com.sun.tools.javac.code.Types.containsTypeEquivalent(Types.java:4277)
at jdk.compiler/com.sun.tools.javac.code.Types.containsTypeEquivalent(Types.java:1369)
at jdk.compiler/com.sun.tools.javac.code.Types$HasSameArgs.visitMethodType(Types.java:2982)
at jdk.compiler/com.sun.tools.javac.code.Types$HasSameArgs.visitMethodType(Types.java:2967)
at jdk.compiler/com.sun.tools.javac.code.Type$MethodType.accept(Type.java:1446)
at jdk.compiler/com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4614)
at jdk.compiler/com.sun.tools.javac.code.Types.hasSameArgs(Types.java:2964)
at jdk.compiler/com.sun.tools.javac.code.Types.hasSameArgs(Types.java:2960)
at jdk.compiler/com.sun.tools.javac.code.Types.isSubSignature(Types.java:2499)
at jdk.compiler/com.sun.tools.javac.code.Types.isSubSignature(Types.java:2495)
at jdk.compiler/com.sun.tools.javac.code.Symbol$MethodSymbol.overrides(Symbol.java:1808)
at jdk.compiler/com.sun.tools.javac.code.Symbol$MethodSymbol.overrides(Symbol.java:1780)
at jdk.compiler/com.sun.tools.javac.code.Types$ImplementationCache.implementationInternal(Types.java:2683)
at jdk.compiler/com.sun.tools.javac.code.Types$ImplementationCache.get(Types.java:2668)
at jdk.compiler/com.sun.tools.javac.code.Types.implementation(Types.java:2703)
at jdk.compiler/com.sun.tools.javac.code.Symbol$MethodSymbol.implementation(Symbol.java:1880)
at jdk.compiler/com.sun.tools.javac.code.Symbol$MethodSymbol.implementation(Symbol.java:1873)
at jdk.compiler/com.sun.tools.javac.code.Types.firstUnimplementedAbstractImpl(Types.java:2819)
at jdk.compiler/com.sun.tools.javac.code.Types.firstUnimplementedAbstractImpl(Types.java:2843)
at jdk.compiler/com.sun.tools.javac.code.Types.firstUnimplementedAbstract(Types.java:2802)
at jdk.compiler/com.sun.tools.javac.comp.Check.checkAllDefined(Check.java:2153)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:4507)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4454)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4383)
at jdk.compiler/com.sun.tools.javac.comp.Attr.visitClassDef(Attr.java:946)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:774)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:653)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:723)
at jdk.compiler/com.sun.tools.javac.comp.Attr.visitAnonymousClassDefinition(Attr.java:2302)
at jdk.compiler/com.sun.tools.javac.comp.Attr.lambda$visitAnonymousClassDefinition$2(Attr.java:2261)
at jdk.compiler/com.sun.tools.javac.comp.InferenceContext.notifyChange(InferenceContext.java:265)
at jdk.compiler/com.sun.tools.javac.comp.InferenceContext.notifyChange(InferenceContext.java:256)
at jdk.compiler/com.sun.tools.javac.comp.Infer.instantiateMethod(Infer.java:248)
at jdk.compiler/com.sun.tools.javac.comp.Resolve.rawInstantiate(Resolve.java:604)
at jdk.compiler/com.sun.tools.javac.comp.Resolve.checkMethod(Resolve.java:643)
at jdk.compiler/com.sun.tools.javac.comp.Attr.checkMethod(Attr.java:3998)
at jdk.compiler/com.sun.tools.javac.comp.Attr.checkIdInternal(Attr.java:3791)
at jdk.compiler/com.sun.tools.javac.comp.Attr.checkMethodIdInternal(Attr.java:3698)
at jdk.compiler/com.sun.tools.javac.comp.Attr.checkMethodId(Attr.java:3677)
at jdk.compiler/com.sun.tools.javac.comp.Attr.checkId(Attr.java:3664)
at jdk.compiler/com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:3549)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2104)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:653)
at jdk.compiler/com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1911)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1628)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:653)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:700)
at jdk.compiler/com.sun.tools.javac.comp.Attr.visitExec(Attr.java:1678)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1446)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:653)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:723)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStats(Attr.java:742)
at jdk.compiler/com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1203)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1014)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:653)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:723)
at jdk.compiler/com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:1094)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:866)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:653)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:723)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:4562)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4454)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4383)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attrib(Attr.java:4328)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1329)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:959)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:302)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:162)
at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:57)
at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:43)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.util.Optional;
public class Error{
public static void main(String[] args){
Optional.of("23").map(str -> new Comparable<>(){
public int compareTo(Integer o){
return o;
}
});
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Don't use type inference
java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux waikin-Satellite-U300 3.2.0-126-generic #169-Ubuntu SMP Fri Mar 31 14:15:21 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
When using a lambda that returns an object that uses generic object into a function, the compiler throws an exception and requests the programmer to file a bug report.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the following code:
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Compile without error or an exception that does not asked to report as a compiler bug
ERROR MESSAGES/STACK TRACES THAT OCCUR :
An exception has occurred in the compiler (9.0.4). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
java.lang.AssertionError: isSameType UNKNOWN
at jdk.compiler/com.sun.tools.javac.code.Types$SameTypeVisitor.visitType(Types.java:1055)
at jdk.compiler/com.sun.tools.javac.code.Types$SameTypeVisitor.visitType(Types.java:1027)
at jdk.compiler/com.sun.tools.javac.code.Type.accept(Type.java:214)
at jdk.compiler/com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4614)
at jdk.compiler/com.sun.tools.javac.code.Types.isSameType(Types.java:1024)
at jdk.compiler/com.sun.tools.javac.code.Types.isSameType(Types.java:1019)
at jdk.compiler/com.sun.tools.javac.code.Types.containsTypeEquivalent(Types.java:4277)
at jdk.compiler/com.sun.tools.javac.code.Types.containsTypeEquivalent(Types.java:1369)
at jdk.compiler/com.sun.tools.javac.code.Types$HasSameArgs.visitMethodType(Types.java:2982)
at jdk.compiler/com.sun.tools.javac.code.Types$HasSameArgs.visitMethodType(Types.java:2967)
at jdk.compiler/com.sun.tools.javac.code.Type$MethodType.accept(Type.java:1446)
at jdk.compiler/com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4614)
at jdk.compiler/com.sun.tools.javac.code.Types.hasSameArgs(Types.java:2964)
at jdk.compiler/com.sun.tools.javac.code.Types.hasSameArgs(Types.java:2960)
at jdk.compiler/com.sun.tools.javac.code.Types.isSubSignature(Types.java:2499)
at jdk.compiler/com.sun.tools.javac.code.Types.isSubSignature(Types.java:2495)
at jdk.compiler/com.sun.tools.javac.code.Symbol$MethodSymbol.overrides(Symbol.java:1808)
at jdk.compiler/com.sun.tools.javac.code.Symbol$MethodSymbol.overrides(Symbol.java:1780)
at jdk.compiler/com.sun.tools.javac.code.Types$ImplementationCache.implementationInternal(Types.java:2683)
at jdk.compiler/com.sun.tools.javac.code.Types$ImplementationCache.get(Types.java:2668)
at jdk.compiler/com.sun.tools.javac.code.Types.implementation(Types.java:2703)
at jdk.compiler/com.sun.tools.javac.code.Symbol$MethodSymbol.implementation(Symbol.java:1880)
at jdk.compiler/com.sun.tools.javac.code.Symbol$MethodSymbol.implementation(Symbol.java:1873)
at jdk.compiler/com.sun.tools.javac.code.Types.firstUnimplementedAbstractImpl(Types.java:2819)
at jdk.compiler/com.sun.tools.javac.code.Types.firstUnimplementedAbstractImpl(Types.java:2843)
at jdk.compiler/com.sun.tools.javac.code.Types.firstUnimplementedAbstract(Types.java:2802)
at jdk.compiler/com.sun.tools.javac.comp.Check.checkAllDefined(Check.java:2153)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:4507)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4454)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4383)
at jdk.compiler/com.sun.tools.javac.comp.Attr.visitClassDef(Attr.java:946)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:774)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:653)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:723)
at jdk.compiler/com.sun.tools.javac.comp.Attr.visitAnonymousClassDefinition(Attr.java:2302)
at jdk.compiler/com.sun.tools.javac.comp.Attr.lambda$visitAnonymousClassDefinition$2(Attr.java:2261)
at jdk.compiler/com.sun.tools.javac.comp.InferenceContext.notifyChange(InferenceContext.java:265)
at jdk.compiler/com.sun.tools.javac.comp.InferenceContext.notifyChange(InferenceContext.java:256)
at jdk.compiler/com.sun.tools.javac.comp.Infer.instantiateMethod(Infer.java:248)
at jdk.compiler/com.sun.tools.javac.comp.Resolve.rawInstantiate(Resolve.java:604)
at jdk.compiler/com.sun.tools.javac.comp.Resolve.checkMethod(Resolve.java:643)
at jdk.compiler/com.sun.tools.javac.comp.Attr.checkMethod(Attr.java:3998)
at jdk.compiler/com.sun.tools.javac.comp.Attr.checkIdInternal(Attr.java:3791)
at jdk.compiler/com.sun.tools.javac.comp.Attr.checkMethodIdInternal(Attr.java:3698)
at jdk.compiler/com.sun.tools.javac.comp.Attr.checkMethodId(Attr.java:3677)
at jdk.compiler/com.sun.tools.javac.comp.Attr.checkId(Attr.java:3664)
at jdk.compiler/com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:3549)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2104)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:653)
at jdk.compiler/com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1911)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1628)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:653)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:700)
at jdk.compiler/com.sun.tools.javac.comp.Attr.visitExec(Attr.java:1678)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1446)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:653)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:723)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStats(Attr.java:742)
at jdk.compiler/com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1203)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1014)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:653)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:723)
at jdk.compiler/com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:1094)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:866)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:653)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:723)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:4562)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4454)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4383)
at jdk.compiler/com.sun.tools.javac.comp.Attr.attrib(Attr.java:4328)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1329)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:959)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:302)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:162)
at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:57)
at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:43)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.util.Optional;
public class Error{
public static void main(String[] args){
Optional.of("23").map(str -> new Comparable<>(){
public int compareTo(Integer o){
return o;
}
});
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Don't use type inference
- duplicates
-
JDK-8203277 preflow visitor used during lambda attribution shouldn't visit class definitions inside the lambda body
-
- Closed
-