Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-5094120

Javac crashes with NPE

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P3 P3
    • None
    • 5.0
    • tools
    • x86
    • windows_xp



      Name: gm110360 Date: 08/30/2004


      FULL PRODUCT VERSION :
      java version "1.5.0-beta3"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-beta3-b60)
      Java HotSpot(TM) Client VM (build 1.5.0-beta3-b60, mixed mode, sharing)

      A DESCRIPTION OF THE PROBLEM :
      Javac's type inference algorithm fails with NPE if one refers to a type variable that is still "undeclared".
      Additionally, the referring type variable itself must have multiple bounds?

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Compile the sample provided.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      The compile should succeed no matter how the parameters of Bug#defError are organised.

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      java.lang.NullPointerException
      at com.sun.tools.javac.code.Types.capture(Types.java:2671)
      at com.sun.tools.javac.code.Types$IsSubTypeFcn.isSubType(Types.java:338)
      at com.sun.tools.javac.code.Types$IsSubTypeFcn.visitType(Types.java:384)
      at com.sun.tools.javac.code.Type$Visitor.visitTypeVar(Type.java:958)
      at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:790)
      at com.sun.tools.javac.code.Types$IsSubTypeFcn.isSubType(Types.java:344)
      at com.sun.tools.javac.code.Types.isSubType(Types.java:327)
      at com.sun.tools.javac.comp.Check.checkExtends(Check.java:412)
      at com.sun.tools.javac.comp.Check.access$100(Check.java:37)
      at com.sun.tools.javac.comp.Check$Validator.visitTypeApply(Check.java:781)
      at com.sun.tools.javac.tree.Tree$TypeApply.accept(Tree.java:1064)
      at com.sun.tools.javac.comp.Check.validate(Check.java:716)
      at com.sun.tools.javac.comp.Check.validate(Check.java:726)
      at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:2382)
      at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:2357)
      at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:2306)
      at com.sun.tools.javac.comp.Attr.visitTypeParameter(Attr.java:2268)
      at com.sun.tools.javac.tree.Tree$TypeParameter.accept(Tree.java:1080)
      at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:256)
      at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:291)
      at com.sun.tools.javac.comp.Attr.attribStats(Attr.java:307)
      at com.sun.tools.javac.comp.MemberEnter.signature(MemberEnter.java:341)
      at com.sun.tools.javac.comp.MemberEnter.visitMethodDef(MemberEnter.java:554)
      at com.sun.tools.javac.tree.Tree$MethodDef.accept(Tree.java:482)
      at com.sun.tools.javac.comp.MemberEnter.memberEnter(MemberEnter.java:383)
      at com.sun.tools.javac.comp.MemberEnter.memberEnter(MemberEnter.java:395)
      at com.sun.tools.javac.comp.MemberEnter.finishClass(MemberEnter.java:405)
      at com.sun.tools.javac.comp.MemberEnter.finish(MemberEnter.java:952)
      at com.sun.tools.javac.comp.MemberEnter.complete(MemberEnter.java:919)
      at com.sun.tools.javac.code.Symbol.complete(Symbol.java:355)
      at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:614)
      at com.sun.tools.javac.comp.Enter.complete(Enter.java:448)
      at com.sun.tools.javac.comp.Enter.main(Enter.java:426)
      at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:382)
      at com.sun.tools.javac.main.Main.compile(Main.java:592)
      at com.sun.tools.javac.main.Main.compile(Main.java:544)
      at com.sun.tools.javac.Main.compile(Main.java:58)
      at com.sun.tools.javac.Main.main(Main.java:48)


      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      public class Bug {

      public static void main(String[] args){
      DummyParameterTakerImpl dpti = new DummyParameterTakerImpl();

      defOk(dpti);
      defError(dpti);
      }

      /**
      * A's decl occurs _before_ it is "used"
      */
      static <A extends Parameter, B extends Dummy & ParameterTaker<A>> void defOk(B b){
      }

      /**
      * A's decl occurs _after_ it is "used" - Results in a NPE
      */
      static <B extends ParameterTaker<A> & Dummy, A extends Parameter> void defError(B b){
      }

      interface Dummy {} // Needed for multiple bounds

      interface ParameterTaker <P extends Parameter> {}

      interface Parameter {}

      static class DummyParameterTakerImpl implements ParameterTaker<Parameter>, Dummy {}
      }
      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Change the order of the variables "A" and "B" (see Bug#defOk).
      (Incident Review ID: 301328)
      ======================================================================

            ahe Peter Ahe
            gmanwanisunw Girish Manwani (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: