Skip to content

exhaustive check crashes on enum with additional traits #12546

Closed
@gregor-i

Description

@gregor-i

Compiler version

print scalaVersion
3.0.0

Minimized code

https://scastie.scala-lang.org/n7ZE3YEnTqeVxdVHNy8W4g

trait SomeRestriction

enum ADT {
  case A extends ADT
  case B extends ADT with SomeRestriction
}

object MinimalExample {
  val b: ADT & SomeRestriction = ADT.B

  b match {
    case ADT.B => ???
  }
}

Output (click arrow to expand)

It seems like the TypeComparer is running in an infinite recursion loop:

[error] java.lang.StackOverflowError
[error] dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:182)
[error] dotty.tools.dotc.core.TypeComparer.isSubType(TypeComparer.scala:190)
[error] dotty.tools.dotc.core.TypeComparer.topLevelSubType(TypeComparer.scala:128)
[error] dotty.tools.dotc.core.TypeComparer$.topLevelSubType(TypeComparer.scala:2603)
[error] dotty.tools.dotc.core.Types$Type.$less$colon$less(Types.scala:1020)
[error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2512)
[error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2524)
[error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint$$anonfun$1(TypeComparer.scala:2447)
[error] scala.collection.immutable.List.forall(List.scala:386)
[error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2447)
[error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2513)
[error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2524)
[error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint$$anonfun$1(TypeComparer.scala:2447)
[error] scala.collection.immutable.List.forall(List.scala:386)
[error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2447)
[error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2513)
[error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2524)
[error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint$$anonfun$1(TypeComparer.scala:2447)
[error] scala.collection.immutable.List.forall(List.scala:386)
[error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2447)
[error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2513)
[error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2524)
[error] dotty.tools.dotc.core.TypeComparer.provablyDisjoint$$anonfun$1(TypeComparer.scala:2447)
...
more lines omitted

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions