Skip to content

Commit a5ff84a

Browse files
authored
Merge pull request #11058 from dotty-staging/fix-10174
Fix #10174: avoid creating deep nesting union space
2 parents b50372e + bbb790f commit a5ff84a

File tree

2 files changed

+1007
-4
lines changed

2 files changed

+1007
-4
lines changed

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -870,18 +870,19 @@ class SpaceEngine(using Context) extends SpaceLogic {
870870
project(OrType(selTyp, constantNullType, soft = false))
871871

872872
// in redundancy check, take guard as false in order to soundly approximate
873-
def projectPrevCases(cases: List[CaseDef]): Space =
873+
def projectPrevCases(cases: List[CaseDef]): List[Space] =
874874
cases.map { x =>
875875
if (x.guard.isEmpty) project(x.pat)
876876
else Empty
877-
}.reduce((a, b) => Or(List(a, b)))
877+
}
878878

879-
(1 until cases.length).foreach { i =>
880-
val prevs = projectPrevCases(cases.take(i))
879+
val spaces = projectPrevCases(cases)
881880

881+
(1 until cases.length).foreach { i =>
882882
val pat = cases(i).pat
883883

884884
if (pat != EmptyTree) { // rethrow case of catch uses EmptyTree
885+
val prevs = Or(spaces.take(i))
885886
val curr = project(pat)
886887

887888
debug.println(s"---------------reachable? ${show(curr)}")

0 commit comments

Comments
 (0)