-
Bug
-
Resolution: Duplicate
-
P3
-
None
-
8u161
-
x86_64
-
linux
FULL PRODUCT VERSION :
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux nuxus 4.15.3-200.fc26.x86_64 #1 SMP Thu Feb 15 17:56:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
javac compilation crashes with an AssertionError on source code provided in the "Source code for an executable test case" section. Note that the code compiles without the "self generic pattern" (Named<T extends Named<T>>).
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
run "javac Named.java"
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The compilation is successful or provides an error describing why the code cannot be compiled.
ACTUAL -
The compilation fails with an AssertionError.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
An exception has occurred in the compiler (1.8.0_161). 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
at com.sun.tools.javac.util.Assert.error(Assert.java:126)
at com.sun.tools.javac.util.Assert.check(Assert.java:45)
at com.sun.tools.javac.code.Types.functionalInterfaceBridges(Types.java:659)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor$TranslationContext.<init>(LambdaToMethod.java:1770)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor$LambdaTranslationContext.<init>(LambdaToMethod.java:1853)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.analyzeLambda(LambdaToMethod.java:1337)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitLambda(LambdaToMethod.java:1322)
at com.sun.tools.javac.tree.JCTree$JCLambda.accept(JCTree.java:1624)
at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.tree.TreeTranslator.visitVarDef(TreeTranslator.java:153)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitVarDef(LambdaToMethod.java:1503)
at com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:852)
at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
at com.sun.tools.javac.tree.TreeTranslator.visitClassDef(TreeTranslator.java:134)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitClassDef(LambdaToMethod.java:1270)
at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.analyzeAndPreprocessClass(LambdaToMethod.java:1197)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.access$300(LambdaToMethod.java:1148)
at com.sun.tools.javac.comp.LambdaToMethod.visitClassDef(LambdaToMethod.java:232)
at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:197)
at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:190)
at com.sun.tools.javac.comp.LambdaToMethod.translateTopLevelClass(LambdaToMethod.java:217)
at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1493)
at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1356)
at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:901)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:860)
at com.sun.tools.javac.main.Main.compile(Main.java:523)
at com.sun.tools.javac.main.Main.compile(Main.java:381)
at com.sun.tools.javac.main.Main.compile(Main.java:370)
at com.sun.tools.javac.main.Main.compile(Main.java:361)
at com.sun.tools.javac.Main.compile(Main.java:56)
at com.sun.tools.javac.Main.main(Main.java:42)
REPRODUCIBILITY :
This bug can be reproduced often.
---------- BEGIN SOURCE ----------
@FunctionalInterface
public interface Named<T extends Named<T>> extends Comparable<T> {
Named UNKNOWN = () -> "UNKNOWN";
String name();
@Override
default int compareTo(final T that) {
return this.name().compareTo(that.name());
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
@FunctionalInterface
public interface Named<T extends Named<T>> extends Comparable<T> {
Unknown UNKNOWN = new Unknown();
class Unknown implements Named<Unknown> {
private Unknown() {}
@Override
public String name() {
return "UNKNOWN";
}
}
String name();
@Override
default int compareTo(final T that) {
return this.name().compareTo(that.name());
}
}
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux nuxus 4.15.3-200.fc26.x86_64 #1 SMP Thu Feb 15 17:56:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
javac compilation crashes with an AssertionError on source code provided in the "Source code for an executable test case" section. Note that the code compiles without the "self generic pattern" (Named<T extends Named<T>>).
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
run "javac Named.java"
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The compilation is successful or provides an error describing why the code cannot be compiled.
ACTUAL -
The compilation fails with an AssertionError.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
An exception has occurred in the compiler (1.8.0_161). 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
at com.sun.tools.javac.util.Assert.error(Assert.java:126)
at com.sun.tools.javac.util.Assert.check(Assert.java:45)
at com.sun.tools.javac.code.Types.functionalInterfaceBridges(Types.java:659)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor$TranslationContext.<init>(LambdaToMethod.java:1770)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor$LambdaTranslationContext.<init>(LambdaToMethod.java:1853)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.analyzeLambda(LambdaToMethod.java:1337)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitLambda(LambdaToMethod.java:1322)
at com.sun.tools.javac.tree.JCTree$JCLambda.accept(JCTree.java:1624)
at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.tree.TreeTranslator.visitVarDef(TreeTranslator.java:153)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitVarDef(LambdaToMethod.java:1503)
at com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:852)
at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
at com.sun.tools.javac.tree.TreeTranslator.visitClassDef(TreeTranslator.java:134)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitClassDef(LambdaToMethod.java:1270)
at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.analyzeAndPreprocessClass(LambdaToMethod.java:1197)
at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.access$300(LambdaToMethod.java:1148)
at com.sun.tools.javac.comp.LambdaToMethod.visitClassDef(LambdaToMethod.java:232)
at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:197)
at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:190)
at com.sun.tools.javac.comp.LambdaToMethod.translateTopLevelClass(LambdaToMethod.java:217)
at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1493)
at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1356)
at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:901)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:860)
at com.sun.tools.javac.main.Main.compile(Main.java:523)
at com.sun.tools.javac.main.Main.compile(Main.java:381)
at com.sun.tools.javac.main.Main.compile(Main.java:370)
at com.sun.tools.javac.main.Main.compile(Main.java:361)
at com.sun.tools.javac.Main.compile(Main.java:56)
at com.sun.tools.javac.Main.main(Main.java:42)
REPRODUCIBILITY :
This bug can be reproduced often.
---------- BEGIN SOURCE ----------
@FunctionalInterface
public interface Named<T extends Named<T>> extends Comparable<T> {
Named UNKNOWN = () -> "UNKNOWN";
String name();
@Override
default int compareTo(final T that) {
return this.name().compareTo(that.name());
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
@FunctionalInterface
public interface Named<T extends Named<T>> extends Comparable<T> {
Unknown UNKNOWN = new Unknown();
class Unknown implements Named<Unknown> {
private Unknown() {}
@Override
public String name() {
return "UNKNOWN";
}
}
String name();
@Override
default int compareTo(final T that) {
return this.name().compareTo(that.name());
}
}
- duplicates
-
JDK-8074381 java.lang.AssertionError during compiling
-
- Closed
-