Skip to content

Error during capture conversion involving union types #6033

Closed
@abeln

Description

@abeln
class Test {
  def f(a: Array[_]|Null): Unit  = a match {
    case x: Array[Int] =>
  }
}

Bisected to 83ac988

Stack trace:

NoExplanation(bad parameter reference (Array[_] | Null)#T at pruneErasedDefs
the parameter is type T in class Array but the prefix Array[_] | Null
does not define any corresponding arguments.) while compiling kk.scala
Exception in thread "main" dotty.tools.dotc.core.TypeError: bad parameter reference (Array[_] | Null)#T at pruneErasedDefs
the parameter is type T in class Array but the prefix Array[_] | Null
does not define any corresponding arguments.
	at dotty.tools.dotc.core.Types$NamedType.argDenot(Types.scala:1926)
	at dotty.tools.dotc.core.Types$NamedType.fromDesignator$1(Types.scala:1843)
	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:1861)
	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:1817)
	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:1806)
	at dotty.tools.dotc.core.TypeComparer.compareNamed$1(TypeComparer.scala:226)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:271)
	at dotty.tools.dotc.core.TypeComparer.$anonfun$recur$2(TypeComparer.scala:997)
	at scala.runtime.java8.JFunction0$mcZ$sp.apply(JFunction0$mcZ$sp.java:23)
	at dotty.tools.dotc.reporting.trace$.apply(trace.scala:40)
	at dotty.tools.dotc.reporting.trace$.apply(trace.scala:44)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:178)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:151)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:161)
	at dotty.tools.dotc.core.TypeComparer.isSubArg$1(TypeComparer.scala:1105)
	at dotty.tools.dotc.core.TypeComparer.compareCaptured$1(TypeComparer.scala:1084)
	at dotty.tools.dotc.core.TypeComparer.isSubArg$1(TypeComparer.scala:1103)
	at dotty.tools.dotc.core.TypeComparer.recurArgs$1(TypeComparer.scala:1112)
	at dotty.tools.dotc.core.TypeComparer.isSubArgs(TypeComparer.scala:1120)
	at dotty.tools.dotc.core.TypeComparer.isMatchingApply$1(TypeComparer.scala:801)
	at dotty.tools.dotc.core.TypeComparer.compareAppliedType2$1(TypeComparer.scala:906)
	at dotty.tools.dotc.core.TypeComparer.thirdTry$1(TypeComparer.scala:468)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:427)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:346)
	at dotty.tools.dotc.core.TypeComparer.$anonfun$recur$2(TypeComparer.scala:997)
	at scala.runtime.java8.JFunction0$mcZ$sp.apply(JFunction0$mcZ$sp.java:23)
	at dotty.tools.dotc.reporting.trace$.apply(trace.scala:40)
	at dotty.tools.dotc.reporting.trace$.apply(trace.scala:44)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:178)
	at dotty.tools.dotc.core.TypeComparer.secondTry$1(TypeComparer.scala:420)
	at dotty.tools.dotc.core.TypeComparer.firstTry$1(TypeComparer.scala:346)
	at dotty.tools.dotc.core.TypeComparer.$anonfun$recur$2(TypeComparer.scala:997)
	at scala.runtime.java8.JFunction0$mcZ$sp.apply(JFunction0$mcZ$sp.java:23)
	at dotty.tools.dotc.reporting.trace$.apply(trace.scala:40)
	at dotty.tools.dotc.reporting.trace$.apply(trace.scala:44)
	at dotty.tools.dotc.core.TypeComparer.recur(TypeComparer.scala:178)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:151)
	at dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:161)
	at dotty.tools.dotc.core.TypeComparer.topLevelSubType(TypeComparer.scala:125)
	at dotty.tools.dotc.core.Types$Type.$anonfun$$less$colon$less$1(Types.scala:839)
	at scala.runtime.java8.JFunction0$mcZ$sp.apply(JFunction0$mcZ$sp.java:23)
	at dotty.tools.dotc.util.Stats$.track(Stats.scala:37)
	at dotty.tools.dotc.core.Types$Type.$less$colon$less(Types.scala:839)
	at dotty.tools.dotc.transform.patmat.SpaceEngine.isSubType(Space.scala:392)
	at dotty.tools.dotc.transform.patmat.SpaceLogic.minus(Space.scala:240)
	at dotty.tools.dotc.transform.patmat.SpaceLogic.minus$(Space.scala:232)
	at dotty.tools.dotc.transform.patmat.SpaceEngine.minus(Space.scala:283)
	at dotty.tools.dotc.transform.patmat.SpaceEngine.checkExhaustivity(Space.scala:922)
	at dotty.tools.dotc.transform.PatternMatcher.transformMatch(PatternMatcher.scala:38)
	at dotty.tools.dotc.transform.MegaPhase.goMatch(MegaPhase.scala:746)
	at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:345)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:396)
	at dotty.tools.dotc.transform.MegaPhase.mapDefDef$1(MegaPhase.scala:245)
	at dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:248)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:394)
	at dotty.tools.dotc.transform.MegaPhase.transformStat$1(MegaPhase.scala:404)
	at dotty.tools.dotc.transform.MegaPhase.$anonfun$transformStats$2(MegaPhase.scala:409)
	at scala.collection.immutable.List.mapConserve(List.scala:179)
	at dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:409)
	at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:339)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:396)
	at dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:251)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:394)
	at dotty.tools.dotc.transform.MegaPhase.transformStat$1(MegaPhase.scala:404)
	at dotty.tools.dotc.transform.MegaPhase.$anonfun$transformStats$2(MegaPhase.scala:409)
	at scala.collection.immutable.List.mapConserve(List.scala:179)
	at dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:409)
	at dotty.tools.dotc.transform.MegaPhase.mapPackage$1(MegaPhase.scala:356)
	at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:359)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:396)
	at dotty.tools.dotc.transform.MegaPhase.transformUnit(MegaPhase.scala:415)
	at dotty.tools.dotc.transform.MegaPhase.run(MegaPhase.scala:427)
	at dotty.tools.dotc.core.Phases$Phase.$anonfun$runOn$1(Phases.scala:309)
	at scala.collection.immutable.List.map(List.scala:286)
	at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:307)
	at dotty.tools.dotc.Run.$anonfun$compileUnits$3(Run.scala:158)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
	at dotty.tools.dotc.util.Stats$.trackTime(Stats.scala:49)
	at dotty.tools.dotc.Run.$anonfun$compileUnits$2(Run.scala:155)
	at dotty.tools.dotc.Run.$anonfun$compileUnits$2$adapted(Run.scala:153)
	at scala.collection.IndexedSeqOptimized.foreach(IndexedSeqOptimized.scala:36)
	at scala.collection.IndexedSeqOptimized.foreach$(IndexedSeqOptimized.scala:33)
	at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:198)
	at dotty.tools.dotc.Run.runPhases$1(Run.scala:153)
	at dotty.tools.dotc.Run.$anonfun$compileUnits$1(Run.scala:178)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
	at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:102)
	at dotty.tools.dotc.Run.compileUnits(Run.scala:133)
	at dotty.tools.dotc.Run.compileSources(Run.scala:120)
	at dotty.tools.dotc.Run.compile(Run.scala:104)
	at dotty.tools.dotc.Driver.doCompile(Driver.scala:33)
	at dotty.tools.dotc.Driver.process(Driver.scala:169)
	at dotty.tools.dotc.Driver.process(Driver.scala:138)
	at dotty.tools.dotc.Driver.process(Driver.scala:150)
	at dotty.tools.dotc.Driver.main(Driver.scala:177)
	at dotty.tools.dotc.Main.main(Main.scala)

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions