Playing with new compiler 2: Crash

Ali Ebrahimi ali.ebrahimi1781 at gmail.com
Wed May 25 00:33:55 PDT 2011


Hi ,

I found following crash in compiler.

public class ARM {
    public static <R, T extends Closeable,throws E>
    R using(T s, Block1<R, T, E> block) throws E {
        try {
            return block.call(s);
        } finally {
            try {
                if(s != null)
                    s.close();
            } catch (IOException ex) {
            }
        }
    }


// *******
    public static <T extends Closeable,throws E>
    void using(T s, Block0<Void, E> block) throws E {
        try {
             block.call();
        } finally {
            try {
                if(s != null)
                    s.close();
            } catch (IOException ex) {
            }
        }
    }


    public static <R extends Closeable,throws E>
    R using(BlockX<R,Void, E> block) throws E {
        R rs = null;
        try {
            rs = block.call();
            return rs;
        } finally {
            try {
                if(rs != null)
                    rs.close();
            } catch (IOException ex) {
            }
        }
    }


    public static <R extends Closeable,throws E>
    R using(Block0<R, E> block) throws E {
        R rs = null;
        try {
            rs = block.call();
            return rs;
        } finally {
            try {
                if(rs != null)
                    rs.close();
            } catch (IOException ex) {
            }
        }
    }

    public static void main(String[] args) {
        InputStream is = null;

        try{
        using(is, #{in ->
                in.read();
            }
        );
        }catch (IOException e) {

        }

        using(#{
            is
            }
        );
    }
}

result:

Information:An exception has occurred in the compiler (1.7.0-internal).
Please file a bug at the Java Developer Connection (
http://java.sun.com/webapps/bugreport)  after checking the Bug Parade for
duplicates. Include your program and the following diagnostic in your
report.  Thank you.
Information:java.lang.NullPointerException
Information:    at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:480)
Information:    at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:498)
Information:    at com.sun.tools.javac.comp.Attr.attribType(Attr.java:526)
Information:    at com.sun.tools.javac.comp.Attr.attribType(Attr.java:519)
Information:    at
com.sun.tools.javac.comp.MemberEnter.visitVarDef(MemberEnter.java:663)
Information:    at
com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:738)
Information:    at
com.sun.tools.javac.comp.MemberEnter.memberEnter(MemberEnter.java:399)
Information:    at com.sun.tools.javac.comp.Attr.visitVarDef(Attr.java:906)
Information:    at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:533)
Information:    at com.sun.tools.javac.comp.Attr.attribStats(Attr.java:549)
Information:    at
com.sun.tools.javac.comp.Attr.attribLambda(Attr.java:2272)
Information:    at
com.sun.tools.javac.comp.Attr$2.deferredAttr(Attr.java:2213)
Information:    at
com.sun.tools.javac.comp.Attr$2.deferredAttr(Attr.java:2210)
Information:    at
com.sun.tools.javac.comp.Attr$SAMDeferredAttribution.complete(Attr.java:2787)
Information:    at
com.sun.tools.javac.code.Type$ForAll.complete(Type.java:1179)
Information:    at
com.sun.tools.javac.comp.Infer.instantiateArg(Infer.java:687)
Information:    at
com.sun.tools.javac.comp.Resolve.checkRawArgumentsAcceptable(Resolve.java:552)
Information:    at
com.sun.tools.javac.comp.Infer.instantiateMethod(Infer.java:431)
Information:    at
com.sun.tools.javac.comp.Resolve.rawInstantiate(Resolve.java:396)
Information:    at
com.sun.tools.javac.comp.Resolve.selectBest(Resolve.java:819)
Information:    at
com.sun.tools.javac.comp.Resolve.findMethod(Resolve.java:1063)
Information:    at
com.sun.tools.javac.comp.Resolve.findMethod(Resolve.java:1024)
Information:    at
com.sun.tools.javac.comp.Resolve.findFun(Resolve.java:1157)
Information:    at
com.sun.tools.javac.comp.Resolve.resolveMethod(Resolve.java:1581)
Information:    at com.sun.tools.javac.comp.Attr.visitIdent(Attr.java:2548)
Information:    at
com.sun.tools.javac.tree.JCTree$JCIdent.accept(JCTree.java:1825)
Information:    at com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1592)
Information:    at
com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1337)
Information:    at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:513)
Information:    at com.sun.tools.javac.comp.Attr.visitExec(Attr.java:1348)
Information:    at
com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1180)
Information:    at com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:971)
Information:    at
com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:794)
Information:    at com.sun.tools.javac.comp.Attr.visitTry(Attr.java:1171)
Information:    at
com.sun.tools.javac.tree.JCTree$JCTry.accept(JCTree.java:1057)
Information:    at
com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:884)
Information:    at
com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:678)
Information:    at
com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:3800)
Information:    at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3722)
Information:    at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3658)
Information:    at com.sun.tools.javac.comp.Attr.attrib(Attr.java:3632)
Information:    at
com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1189)
Information:    at
com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:877)
Information:    at
com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:836)
Information:    at com.sun.tools.javac.main.Main.compile(Main.java:417)
Information:    at com.sun.tools.javac.main.Main.compile(Main.java:331)
Information:    at com.sun.tools.javac.main.Main.compile(Main.java:322)
Information:    at com.sun.tools.javac.Main.compile(Main.java:76)
Information:    at com.sun.tools.javac.Main.main(Main.java:61)
Information:    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
Information:    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
Information:    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Information:    at java.lang.reflect.Method.invoke(Method.java:598)
Information:    at
com.intellij.rt.compiler.JavacRunner.main(JavacRunner.java:71)
Information:Compilation completed with 1 error and 0 warnings
Information:1 error
Information:0 warnings
Error:Compiler internal error. Process terminated with exit code 4

If i comment second "using" method (*******), the crash goes away.

Best Regards.
Ali Ebrahimi


More information about the lambda-dev mailing list