Closed
Description
I accidentally created a path-dependent pattern match clause involving a method and it crashed the compiler. I minimized it to the code snippet below. I tried it with Scala 2.12.3 and OpenJDK 1.8.0_131 on Ubuntu 16.04.
object Test {
def Foo(a: Int): Char = ???
object Bar
def crash[A](): Boolean = Bar match {
case Foo.Bar ⇒ true
case _ ⇒ false
}
}
This is the resulting stack trace:
$ scalac parser.scala
error: java.lang.NullPointerException
at scala.tools.nsc.ast.TreeInfo$ValueClass$.$anonfun$valueUnbox$1(TreeInfo.scala:45)
at scala.tools.nsc.ast.TreeInfo$ValueClass$.valueUnbox(TreeInfo.scala:45)
at scala.tools.nsc.ast.TreeInfo$ValueClass$Unbox$.unapply(TreeInfo.scala:50)
at scala.tools.nsc.ast.TreeInfo$ValueClass$BoxAndUnbox$.unapply(TreeInfo.scala:64)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:37)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.reflect.internal.Trees.itransform(Trees.scala:1379)
at scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:35)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.reflect.internal.Trees.itransform(Trees.scala:1432)
at scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:35)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2589)
at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587)
at scala.reflect.internal.Trees.itransform(Trees.scala:1377)
at scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:35)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.reflect.internal.Trees.$anonfun$itransform$2(Trees.scala:1374)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:25)
at scala.reflect.internal.Trees.itransform(Trees.scala:1372)
at scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:35)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2589)
at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587)
at scala.reflect.internal.Trees.itransform(Trees.scala:1415)
at scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.super$transform(TypingTransformers.scala:40)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.$anonfun$transform$1(TypingTransformers.scala:40)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:25)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:35)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2563)
at scala.reflect.internal.Trees.$anonfun$itransform$4(Trees.scala:1419)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:25)
at scala.reflect.internal.Trees.itransform(Trees.scala:1418)
at scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:35)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2589)
at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587)
at scala.reflect.internal.Trees.$anonfun$itransform$7(Trees.scala:1437)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:25)
at scala.reflect.internal.Trees.itransform(Trees.scala:1437)
at scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.super$transform(TypingTransformers.scala:40)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.$anonfun$transform$2(TypingTransformers.scala:42)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:25)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:35)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:140)
at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
at scala.tools.nsc.Global$GlobalPhase.$anonfun$applyPhase$1(Global.scala:426)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:419)
at scala.tools.nsc.Global$GlobalPhase.$anonfun$run$1(Global.scala:390)
at scala.tools.nsc.Global$GlobalPhase.$anonfun$run$1$adapted(Global.scala:390)
at scala.collection.Iterator.foreach(Iterator.scala:929)
at scala.collection.Iterator.foreach$(Iterator.scala:929)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1417)
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:390)
at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1431)
at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1416)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:1412)
at scala.tools.nsc.Global$Run.compile(Global.scala:1515)
at scala.tools.nsc.Driver.doCompile(Driver.scala:35)
at scala.tools.nsc.MainClass.doCompile(Main.scala:24)
at scala.tools.nsc.Driver.process(Driver.scala:55)
at scala.tools.nsc.Driver.main(Driver.scala:68)
at scala.tools.nsc.Main.main(Main.scala)
Exception in thread "main" java.lang.NullPointerException
at scala.tools.nsc.ast.TreeInfo$ValueClass$.$anonfun$valueUnbox$1(TreeInfo.scala:45)
at scala.tools.nsc.ast.TreeInfo$ValueClass$.valueUnbox(TreeInfo.scala:45)
at scala.tools.nsc.ast.TreeInfo$ValueClass$Unbox$.unapply(TreeInfo.scala:50)
at scala.tools.nsc.ast.TreeInfo$ValueClass$BoxAndUnbox$.unapply(TreeInfo.scala:64)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:37)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.reflect.internal.Trees.itransform(Trees.scala:1379)
at scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:35)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.reflect.internal.Trees.itransform(Trees.scala:1432)
at scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:35)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2589)
at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587)
at scala.reflect.internal.Trees.itransform(Trees.scala:1377)
at scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:35)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.reflect.internal.Trees.$anonfun$itransform$2(Trees.scala:1374)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:25)
at scala.reflect.internal.Trees.itransform(Trees.scala:1372)
at scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:35)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2589)
at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587)
at scala.reflect.internal.Trees.itransform(Trees.scala:1415)
at scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.super$transform(TypingTransformers.scala:40)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.$anonfun$transform$1(TypingTransformers.scala:40)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:25)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:35)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2563)
at scala.reflect.internal.Trees.$anonfun$itransform$4(Trees.scala:1419)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:25)
at scala.reflect.internal.Trees.itransform(Trees.scala:1418)
at scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:35)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2589)
at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587)
at scala.reflect.internal.Trees.$anonfun$itransform$7(Trees.scala:1437)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:25)
at scala.reflect.internal.Trees.itransform(Trees.scala:1437)
at scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.super$transform(TypingTransformers.scala:40)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.$anonfun$transform$2(TypingTransformers.scala:42)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:25)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:35)
at scala.tools.nsc.transform.PostErasure$PostErasureTransformer.transform(PostErasure.scala:22)
at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:140)
at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
at scala.tools.nsc.Global$GlobalPhase.$anonfun$applyPhase$1(Global.scala:426)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:419)
at scala.tools.nsc.Global$GlobalPhase.$anonfun$run$1(Global.scala:390)
at scala.tools.nsc.Global$GlobalPhase.$anonfun$run$1$adapted(Global.scala:390)
at scala.collection.Iterator.foreach(Iterator.scala:929)
at scala.collection.Iterator.foreach$(Iterator.scala:929)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1417)
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:390)
at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1431)
at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1416)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:1412)
at scala.tools.nsc.Global$Run.compile(Global.scala:1515)
at scala.tools.nsc.Driver.doCompile(Driver.scala:35)
at scala.tools.nsc.MainClass.doCompile(Main.scala:24)
at scala.tools.nsc.Driver.process(Driver.scala:55)
at scala.tools.nsc.Driver.main(Driver.scala:68)
at scala.tools.nsc.Main.main(Main.scala)