Skip to content

Match type on Map crashes the compiler #10349

Closed
@weihsiu

Description

@weihsiu

Minimized code

Scala 3.0.0-M1

object Firsts:

  type First[X] = X match
    case Map[_, v] => First[Option[v]]

  def first[X](x: X): First[X] = x match
    case x: Map[_, _] => first(x.values.headOption)

  @main
  def runFirsts2(): Unit =
    assert(first(Map.empty[Int, Int]) == None)

Output (click arrow to expand)

compiler crashes with the following exception.

[error] java.lang.NullPointerException [error] dotty.tools.dotc.core.NameKinds$UniqueNameKind.fresh(NameKinds.scala:222) [error] dotty.tools.dotc.typer.ProtoTypes$.newTypeVar(ProtoTypes.scala:560) [error] dotty.tools.dotc.core.TypeOps$.$anonfun$4(TypeOps.scala:755) [error] scala.collection.immutable.List.map(List.scala:246) [error] dotty.tools.dotc.core.TypeOps$.instantiateToSubType(TypeOps.scala:755) [error] dotty.tools.dotc.core.TypeOps$.refineUsingParent(TypeOps.scala:657) [error] dotty.tools.dotc.core.TypeComparer.decompose$2$$anonfun$1(TypeComparer.scala:2382) [error] scala.collection.immutable.List.map(List.scala:250) [error] dotty.tools.dotc.core.TypeComparer.decompose$1(TypeComparer.scala:2382) [error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2405) [error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2475) [error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2475) [error] dotty.tools.dotc.core.TrackingTypeComparer.matchCase$1(TypeComparer.scala:2768) [error] dotty.tools.dotc.core.TrackingTypeComparer.recur$2(TypeComparer.scala:2777) [error] dotty.tools.dotc.core.TrackingTypeComparer.op$proxy44$1(TypeComparer.scala:2798) [error] dotty.tools.dotc.core.TrackingTypeComparer.matchCases(TypeComparer.scala:2799) [error] dotty.tools.dotc.core.Types$MatchType.liftedTree1$2(Types.scala:4402) [error] dotty.tools.dotc.core.Types$MatchType.matchCases$1(Types.scala:4405) [error] dotty.tools.dotc.core.Types$MatchType.reduced$$anonfun$1(Types.scala:4406) [error] dotty.tools.dotc.core.TypeComparer.inSubComparer(TypeComparer.scala:2491) [error] dotty.tools.dotc.core.TypeComparer.tracked(TypeComparer.scala:2501) ...

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions