eclipse-archived / ceylon

The Ceylon compiler, language module, and command line tools
http://ceylon-lang.org
Apache License 2.0
395 stars 62 forks source link

Backend bug with types comparable to boxed types #7416

Closed jvasileff closed 5 years ago

jvasileff commented 5 years ago

With #7411, we can now create types that are comparable to unrelated types. The Java backend has trouble with this for types that are comparable to boxed types:

void run() {
    print(C(1) < 5);
}

class C(Integer i) satisfies Comparable<Integer> {
    compare(Integer o) => i <=> o;
}
source/simple/run.ceylon:2: error: Ceylon backend error: bad operand types for binary operator '<'
    print(C(1) < 5);
                 ^
  first type:  C
  second type: long
Note: Created module simple/1.0.0
ceylon compile: Fatal error: The compiler exited abnormally (4) due to a bug in the compiler.
Please report it:
 https://github.com/ceylon/ceylon/issues/new
Please include:

* the stacktrace printed below
* a description of what you were trying to compile.

Thank you!
org.eclipse.ceylon.compiler.CompilerBugException: Bug
        at org.eclipse.ceylon.compiler.CeylonCompileTool.handleExitCode(CeylonCompileTool.java:933)
        at org.eclipse.ceylon.compiler.CeylonCompileTool.run(CeylonCompileTool.java:915)
        at org.eclipse.ceylon.common.tools.CeylonTool.run(CeylonTool.java:537)
        at org.eclipse.ceylon.common.tools.CeylonTool.execute(CeylonTool.java:413)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.eclipse.ceylon.launcher.Launcher.runInJava7Checked(Launcher.java:117)
        at org.eclipse.ceylon.launcher.Launcher.run(Launcher.java:47)
        at org.eclipse.ceylon.launcher.Launcher.run(Launcher.java:40)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.eclipse.ceylon.launcher.Bootstrap.runVersion(Bootstrap.java:171)
        at org.eclipse.ceylon.launcher.Bootstrap.runInternal(Bootstrap.java:126)
        at org.eclipse.ceylon.launcher.Bootstrap.run(Bootstrap.java:102)
        at org.eclipse.ceylon.launcher.Bootstrap.main(Bootstrap.java:94)
Caused by: java.lang.NullPointerException
        at org.eclipse.ceylon.langtools.tools.javac.comp.TransTypes.visitBinary(TransTypes.java:755)
        at org.eclipse.ceylon.langtools.tools.javac.tree.JCTree$JCBinary.accept(JCTree.java:1784)
        at org.eclipse.ceylon.langtools.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at org.eclipse.ceylon.langtools.tools.javac.comp.TransTypes.translate(TransTypes.java:501)
        at org.eclipse.ceylon.langtools.tools.javac.comp.TransTypes.translateArgs(TransTypes.java:217)
        at org.eclipse.ceylon.langtools.tools.javac.comp.TransTypes.visitApply(TransTypes.java:693)
        at org.eclipse.ceylon.langtools.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1464)
        at org.eclipse.ceylon.langtools.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at org.eclipse.ceylon.langtools.tools.javac.comp.TransTypes.translate(TransTypes.java:501)
        at org.eclipse.ceylon.langtools.tools.javac.comp.TransTypes.translateArgs(TransTypes.java:217)
        at org.eclipse.ceylon.langtools.tools.javac.comp.TransTypes.visitApply(TransTypes.java:693)
        at org.eclipse.ceylon.langtools.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1464)
        at org.eclipse.ceylon.langtools.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at org.eclipse.ceylon.langtools.tools.javac.comp.TransTypes.translate(TransTypes.java:501)
        at org.eclipse.ceylon.langtools.tools.javac.comp.TransTypes.visitExec(TransTypes.java:655)
        at org.eclipse.ceylon.langtools.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1295)
        at org.eclipse.ceylon.langtools.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at org.eclipse.ceylon.langtools.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
        at org.eclipse.ceylon.langtools.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:162)
        at org.eclipse.ceylon.langtools.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:908)
        at org.eclipse.ceylon.langtools.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at org.eclipse.ceylon.langtools.tools.javac.comp.TransTypes.translate(TransTypes.java:501)
        at org.eclipse.ceylon.langtools.tools.javac.comp.TransTypes.visitMethodDef(TransTypes.java:536)
        at org.eclipse.ceylon.langtools.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:777)
        at org.eclipse.ceylon.langtools.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at org.eclipse.ceylon.langtools.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
        at org.eclipse.ceylon.langtools.tools.javac.tree.TreeTranslator.visitClassDef(TreeTranslator.java:134)
        at org.eclipse.ceylon.langtools.tools.javac.comp.TransTypes.translateClass(TransTypes.java:1059)
        at org.eclipse.ceylon.langtools.tools.javac.comp.TransTypes.visitClassDef(TransTypes.java:522)
        at org.eclipse.ceylon.langtools.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:692)
        at org.eclipse.ceylon.langtools.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at org.eclipse.ceylon.langtools.tools.javac.comp.TransTypes.translate(TransTypes.java:501)
        at org.eclipse.ceylon.langtools.tools.javac.comp.TransTypes.translateTopLevelClass(TransTypes.java:1087)
        at org.eclipse.ceylon.langtools.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1487)
        at org.eclipse.ceylon.compiler.java.tools.LanguageCompiler.desugar(LanguageCompiler.java:848)
        at org.eclipse.ceylon.langtools.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1357)
        at org.eclipse.ceylon.langtools.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:902)
        at org.eclipse.ceylon.langtools.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:860)
        at org.eclipse.ceylon.compiler.java.tools.LanguageCompiler.compile(LanguageCompiler.java:270)
        at org.eclipse.ceylon.compiler.java.launcher.Main.compile(Main.java:660)
        at org.eclipse.ceylon.compiler.java.launcher.Main.compile(Main.java:563)
        at org.eclipse.ceylon.compiler.java.launcher.Main.compile(Main.java:555)
        at org.eclipse.ceylon.compiler.java.launcher.Main.compile(Main.java:544)
        at org.eclipse.ceylon.compiler.CeylonCompileTool.run(CeylonCompileTool.java:914)
        ... 17 more
gavinking commented 5 years ago

Grrr. :-(

gavinking commented 5 years ago

Fixed.