Skip to content

Commit d353010

Browse files
committed
space: Fix how sealed abstract classes decompose
1 parent 5a8a61d commit d353010

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

compiler/src/dotty/tools/dotc/transform/patmat/Space.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ class SpaceEngine(using Context) extends SpaceLogic {
631631
case tp =>
632632
def getChildren(sym: Symbol): List[Symbol] =
633633
sym.children.flatMap { child =>
634-
if child eq sym then Nil // i3145: sealed trait Baz, val x = new Baz {}, Baz.children returns Baz...
634+
if child eq sym then List(sym) // i3145: sealed trait Baz, val x = new Baz {}, Baz.children returns Baz...
635635
else if tp.classSymbol == defn.TupleClass || tp.classSymbol == defn.NonEmptyTupleClass then
636636
List(child) // TupleN and TupleXXL classes are used for Tuple, but they aren't Tuple's children
637637
else if (child.is(Private) || child.is(Sealed)) && child.isOneOf(AbstractOrTrait) then getChildren(child)

tests/pos/i15522.scala

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// scalac: -Werror
2+
sealed trait Coverage
3+
sealed abstract case class Range(min: Double, max: Double) extends Coverage
4+
case object Empty extends Coverage
5+
6+
object Test:
7+
def mkCoverage(min: Double, max: Double): Coverage =
8+
if min < max then new Range(min, max) {} else Empty
9+
10+
def meth(c1: Coverage, c2: Coverage): Coverage = (c1, c2) match
11+
case (Empty, _) => Empty
12+
case (_, Empty) => Empty // was: Unreachable case
13+
case (Range(a1, b1), Range(a2, b2)) => mkCoverage(a1 max a2, b1 min b2)

0 commit comments

Comments
 (0)