Skip to content

Commit 735a69c

Browse files
committed
Fix #12559: Try decomposable types in isSubspace
1 parent 4f40ef0 commit 735a69c

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

Diff for: compiler/src/dotty/tools/dotc/transform/patmat/Space.scala

+2
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,8 @@ trait SpaceLogic {
176176
ss.forall(isSubspace(_, b))
177177
case (Typ(tp1, _), Typ(tp2, _)) =>
178178
isSubType(tp1, tp2)
179+
|| canDecompose(tp1) && tryDecompose1(tp1)
180+
|| canDecompose(tp2) && tryDecompose2(tp2)
179181
case (Typ(tp1, _), Or(ss)) => // optimization: don't go to subtraction too early
180182
ss.exists(isSubspace(a, _)) || tryDecompose1(tp1)
181183
case (_, Or(_)) =>

Diff for: tests/patmat/i12559.check

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
10: Match case Unreachable
2+
27: Match case Unreachable

Diff for: tests/patmat/i12559.scala

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package akka.event
2+
3+
object TestA:
4+
sealed trait LogEvent
5+
6+
object LogEvent:
7+
def myOrdinal(e: LogEvent): Int = e match
8+
case e: Error => 0
9+
// case e: Warning => 1
10+
case e: LogEventWithMarker => 2
11+
12+
13+
class Error() extends LogEvent
14+
class Error2() extends Error() with LogEventWithMarker
15+
16+
// case class Warning() extends LogEvent
17+
18+
sealed trait LogEventWithMarker extends LogEvent
19+
20+
object TestB:
21+
sealed trait LogEvent
22+
23+
object LogEvent:
24+
def myOrdinal(e: LogEvent): Int = e match
25+
case e: Error => 0
26+
case e: Warning => 1
27+
case e: LogEventWithMarker => 2
28+
29+
30+
case class Error() extends LogEvent
31+
class Error2() extends Error() with LogEventWithMarker
32+
33+
case class Warning() extends LogEvent
34+
35+
sealed trait LogEventWithMarker extends LogEvent

0 commit comments

Comments
 (0)