Skip to content

Compiler crashes when trying to emit invalid @switch #3561

Closed
@allanrenucci

Description

@allanrenucci
class Test {
  val Constant = 'Q' // OK if final
  def tokenMe(ch: Char) = (ch: @annotation.switch) match {
    case ' ' => 1
    case 'A' => 2
    case '5' | Constant => 3
  }
}
Stacktrace
[info] Running dotty.tools.dotc.Main -classpath /Users/renucci/projects/dotty/library/target/scala-2.12/dotty-library_2.12-0.5.0-bin-SNAPSHOT-nonbootstrapped.jar -d out tests/allan/Test.scala
exception occurred while compiling tests/allan/Test.scala
Exception in thread "main" scala.MatchError: List() (of class scala.collection.immutable.Nil$)
	at dotty.tools.dotc.transform.PatternMatcher$Translator.emitSwitchCases(PatternMatcher.scala:818)
	at dotty.tools.dotc.transform.PatternMatcher$Translator.emitSwitchCases(PatternMatcher.scala:820)
	at dotty.tools.dotc.transform.PatternMatcher$Translator.emitSwitchCases(PatternMatcher.scala:820)
	at dotty.tools.dotc.transform.PatternMatcher$Translator.emitSwitchCases(PatternMatcher.scala:820)
	at dotty.tools.dotc.transform.PatternMatcher$Translator.emitSwitchCases(PatternMatcher.scala:820)
	at dotty.tools.dotc.transform.PatternMatcher$Translator.emit(PatternMatcher.scala:838)
	at dotty.tools.dotc.transform.PatternMatcher$Translator.emit(PatternMatcher.scala:846)
	at dotty.tools.dotc.transform.PatternMatcher$Translator.emit(PatternMatcher.scala:842)
	at dotty.tools.dotc.transform.PatternMatcher$Translator.translateMatch(PatternMatcher.scala:932)
	at dotty.tools.dotc.transform.PatternMatcher.transformMatch(PatternMatcher.scala:31)
	at dotty.tools.dotc.transform.MegaPhase.goMatch(MegaPhase.scala:711)
	at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:323)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:365)
	at dotty.tools.dotc.transform.MegaPhase.mapDefDef$1(MegaPhase.scala:228)
	at dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:231)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:364)
	at dotty.tools.dotc.transform.MegaPhase.transformStat$1(MegaPhase.scala:373)
	at dotty.tools.dotc.transform.MegaPhase.$anonfun$transformStats$2(MegaPhase.scala:378)
	at scala.collection.immutable.List.mapConserve(List.scala:176)
	at dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:378)
	at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:317)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:365)
	at dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:234)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:364)
	at dotty.tools.dotc.transform.MegaPhase.transformStat$1(MegaPhase.scala:373)
	at dotty.tools.dotc.transform.MegaPhase.$anonfun$transformStats$2(MegaPhase.scala:378)
	at scala.collection.immutable.List.mapConserve(List.scala:176)
	at dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:378)
	at dotty.tools.dotc.transform.MegaPhase.mapPackage$1(MegaPhase.scala:334)
	at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:337)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:365)
	at dotty.tools.dotc.transform.MegaPhase.transformUnit(MegaPhase.scala:384)
	at dotty.tools.dotc.transform.MegaPhase.run(MegaPhase.scala:396)
	at dotty.tools.dotc.core.Phases$Phase.$anonfun$runOn$1(Phases.scala:289)
	at scala.collection.immutable.List.map(List.scala:283)
	at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:287)
	at dotty.tools.dotc.core.Phases$Phase.runOn$(Phases.scala:286)
	at dotty.tools.dotc.transform.MegaPhase.runOn(MegaPhase.scala:138)
	at dotty.tools.dotc.Run.$anonfun$compileUnits$3(Run.scala:125)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.util.Stats$.trackTime(Stats.scala:47)
	at dotty.tools.dotc.Run.$anonfun$compileUnits$2(Run.scala:123)
	at dotty.tools.dotc.Run.$anonfun$compileUnits$2$adapted(Run.scala:121)
	at scala.collection.IndexedSeqOptimized.foreach(IndexedSeqOptimized.scala:32)
	at scala.collection.IndexedSeqOptimized.foreach$(IndexedSeqOptimized.scala:29)
	at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:191)
	at dotty.tools.dotc.Run.runPhases$1(Run.scala:121)
	at dotty.tools.dotc.Run.$anonfun$compileUnits$1(Run.scala:141)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:86)
	at dotty.tools.dotc.Run.compileUnits(Run.scala:107)
	at dotty.tools.dotc.Run.compileSources(Run.scala:94)
	at dotty.tools.dotc.Run.compile(Run.scala:78)
	at dotty.tools.dotc.Driver.doCompile(Driver.scala:29)
	at dotty.tools.dotc.Driver.process(Driver.scala:127)
	at dotty.tools.dotc.Driver.process(Driver.scala:96)
	at dotty.tools.dotc.Driver.process(Driver.scala:108)
	at dotty.tools.dotc.Driver.main(Driver.scala:135)
	at dotty.tools.dotc.Main.main(Main.scala)
 

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions