NPE and AssertionError are thrown by calling Constructor

bitter_fox bitterfoxc at gmail.com
Sun Jul 1 18:39:25 PDT 2012


Hi,
I found the javac throws two exceptions by calling Constructor.
(The exceptions appeared in the newest binary snapshot[1] and the newest
langtools repository[2].)

Here is the test code:


/**
  * file: Main.java
  */
import java.io.*;

public class Main
{
    public static void main(String[] args)
    {

        m(new A(new File(""))); // NPE
        m(new A(null)); // AssertionError: typecode 20
    }

    public static void m(Object o) {}
}


/**
  * file: A.java
  */
public class A
{
    public A(File/* Unknown Class */ f) {}
}

If we compile Main.java, the javac throws NPE or AssertionError:

>javac Main.java
java.lang.NullPointerException
        at
com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitNewClass(Flow.java:12
03)
        at
com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1444)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
        at
com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitNewClass(Flow.java:12
01)
        at
com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1444)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
        at
com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitApply(Flow.java:1194)

        at
com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java
:1393)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at
com.sun.tools.javac.tree.TreeScanner.visitExec(TreeScanner.java:173)
        at
com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.j
ava:1224)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
        at
com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitBlock(Flow.java:956)
        at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:837)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at
com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitMethodDef(Flow.java:9
23)
        at
com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:721)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at
com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitClassDef(Flow.java:88
6)
        at
com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:643)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at
com.sun.tools.javac.comp.Flow$FlowAnalyzer.analyzeTree(Flow.java:1275
)
        at
com.sun.tools.javac.comp.Flow$FlowAnalyzer.analyzeTree(Flow.java:1265
)
        at com.sun.tools.javac.comp.Flow.analyzeTree(Flow.java:209)
        at
com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1266)
        at
com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1240)
        at
com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:892)

        at
com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:851)
        at com.sun.tools.javac.main.Main.compile(Main.java:441)
        at com.sun.tools.javac.main.Main.compile(Main.java:358)
        at com.sun.tools.javac.main.Main.compile(Main.java:347)
        at com.sun.tools.javac.main.Main.compile(Main.java:338)
        at com.sun.tools.javac.Main.compile(Main.java:76)
        at com.sun.tools.javac.Main.main(Main.java:61)

>javac Main.java
java.lang.AssertionError: typecode 20
        at com.sun.tools.javac.jvm.Code.typecode(Code.java:245)
        at com.sun.tools.javac.jvm.Items$Item.coerce(Items.java:273)
        at com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:834)
        at com.sun.tools.javac.jvm.Gen.genArgs(Gen.java:851)
        at com.sun.tools.javac.jvm.Gen.visitNewClass(Gen.java:1732)
        at
com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1444)
        at com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:832)
        at com.sun.tools.javac.jvm.Gen.genArgs(Gen.java:851)
        at com.sun.tools.javac.jvm.Gen.visitApply(Gen.java:1689)
        at
com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java
:1393)
        at com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:832)
        at com.sun.tools.javac.jvm.Gen.visitExec(Gen.java:1637)
        at
com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.j
ava:1224)
        at com.sun.tools.javac.jvm.Gen.genDef(Gen.java:679)
        at com.sun.tools.javac.jvm.Gen.genStat(Gen.java:714)
        at com.sun.tools.javac.jvm.Gen.genStat(Gen.java:700)
        at com.sun.tools.javac.jvm.Gen.genStats(Gen.java:751)
        at com.sun.tools.javac.jvm.Gen.visitBlock(Gen.java:1029)
        at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:837)
        at com.sun.tools.javac.jvm.Gen.genDef(Gen.java:679)
        at com.sun.tools.javac.jvm.Gen.genStat(Gen.java:714)
        at com.sun.tools.javac.jvm.Gen.genMethod(Gen.java:907)
        at com.sun.tools.javac.jvm.Gen.visitMethodDef(Gen.java:880)
        at
com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:721)
        at com.sun.tools.javac.jvm.Gen.genDef(Gen.java:679)
        at com.sun.tools.javac.jvm.Gen.genClass(Gen.java:2245)
        at
com.sun.tools.javac.main.JavaCompiler.genCode(JavaCompiler.java:734)
        at
com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1478
)
        at
com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1442
)
        at
com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:892)

        at
com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:851)
        at com.sun.tools.javac.main.Main.compile(Main.java:441)
        at com.sun.tools.javac.main.Main.compile(Main.java:358)
        at com.sun.tools.javac.main.Main.compile(Main.java:347)
        at com.sun.tools.javac.main.Main.compile(Main.java:338)
        at com.sun.tools.javac.Main.compile(Main.java:76)
        at com.sun.tools.javac.Main.main(Main.java:61)

[1]:http://mail.openjdk.java.net/pipermail/lambda-dev/2012-June/005095.html
[2]:http://mail.openjdk.java.net/pipermail/lambda-dev/2012-June/005121.html

Regards,
bitter_fox


More information about the lambda-dev mailing list