-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Closed
Labels
Description
Compiling this:
trait X {
type Y
abstract def y: Y
}
object Z {
val x: X = new X {
type Y = Int
def y: Int = 1
}
}
causes the following compiler crash during bytecode generation:
java.lang.NullPointerException
at scala.tools.asm.tree.MethodNode.visitLocalVariable(MethodNode.java:571)
at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.emitNormalMethodBody$1(BCodeSkelBuilder.scala:625)
at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.genDefDef(BCodeSkelBuilder.scala:641)
at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.gen(BCodeSkelBuilder.scala:510)
at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder$$anonfun$gen$1.apply(BCodeSkelBuilder.scala:512)
at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder$$anonfun$gen$1.apply(BCodeSkelBuilder.scala:512)
at scala.collection.immutable.List.foreach(List.scala:381)
at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.gen(BCodeSkelBuilder.scala:512)
at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.genPlainClass(BCodeSkelBuilder.scala:119)
at dotty.tools.backend.jvm.GenBCodePipeline$Worker1.visit(GenBCode.scala:175)
at dotty.tools.backend.jvm.GenBCodePipeline$Worker1.run(GenBCode.scala:127)
at dotty.tools.backend.jvm.GenBCodePipeline.buildAndSendToDisk(GenBCode.scala:329)
at dotty.tools.backend.jvm.GenBCodePipeline.run(GenBCode.scala:298)
at dotty.tools.backend.jvm.GenBCode.run(GenBCode.scala:41)
at dotty.tools.dotc.core.Phases$Phase$$anonfun$runOn$1.apply(Phases.scala:271)
at dotty.tools.dotc.core.Phases$Phase$$anonfun$runOn$1.apply(Phases.scala:269)
at scala.collection.immutable.List.map(List.scala:273)
at dotty.tools.dotc.core.Phases$Phase$class.runOn(Phases.scala:269)
at dotty.tools.backend.jvm.GenBCode.runOn(GenBCode.scala:34)
at dotty.tools.dotc.Run$$anonfun$compileUnits$1$$anonfun$apply$mcV$sp$1.apply(Run.scala:59)
at dotty.tools.dotc.Run$$anonfun$compileUnits$1$$anonfun$apply$mcV$sp$1.apply(Run.scala:56)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
at dotty.tools.dotc.Run$$anonfun$compileUnits$1.apply$mcV$sp(Run.scala:56)
at dotty.tools.dotc.Run$$anonfun$compileUnits$1.apply(Run.scala:52)
at dotty.tools.dotc.Run$$anonfun$compileUnits$1.apply(Run.scala:52)
at dotty.tools.dotc.util.Stats$.monitorHeartBeat(Stats.scala:69)
at dotty.tools.dotc.Run.compileUnits(Run.scala:52)
at dotty.tools.dotc.Run.compileSources(Run.scala:49)
at dotty.tools.dotc.Run.compile(Run.scala:33)
at dotty.tools.dotc.Driver.doCompile(Driver.scala:21)
at dotty.tools.dotc.Driver.process(Driver.scala:44)
at dotty.tools.dotc.Driver.main(Driver.scala:48)
at dotty.tools.dotc.Main.main(Main.scala)
error: Error while emitting test.scala
However, removing the abstract
keyword results in successful compilation. It seems like the abstract
keyword, when applied to an already-abstract method, should have no effect on the output.