Skip to content

Commit 4977571

Browse files
committed
Fix #2140: Avoid exponential subtype complexity
Avoid exponential subtype complexity arising from revisiting |-types unnecessarily.
1 parent 1a4060c commit 4977571

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

compiler/src/dotty/tools/dotc/core/TypeComparer.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -993,7 +993,7 @@ class TypeComparer(initctx: Context) extends DotClass with ConstraintHandling {
993993
case tp: ProtoType => false
994994
case tp: RefinedOrRecType => isCovered(tp.parent)
995995
case tp: AnnotatedType => isCovered(tp.underlying)
996-
case AndType(tp1, tp2) => isCovered(tp1) && isCovered(tp2)
996+
case tp: AndOrType => isCovered(tp.tp1) && isCovered(tp.tp2)
997997
case _ => false
998998
}
999999

tests/pending/pos/i2140.scala

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
object Test {
2+
def main(args: Array[String]): Unit = {
3+
val s = 1
4+
val t = 23 match {
5+
case 0 => (s)
6+
case 1 => (s, s)
7+
case 2 => (s, s, s)
8+
case 3 => (s, s, s, s)
9+
case 4 => (s, s, s, s, s)
10+
case 5 => (s, s, s, s, s, s)
11+
case 6 => (s, s, s, s, s, s, s)
12+
case 7 => (s, s, s, s, s, s, s, s)
13+
case 8 => (s, s, s, s, s, s, s, s, s)
14+
case 9 => (s, s, s, s, s, s, s, s, s, s)
15+
case 10 => (s, s, s, s, s, s, s, s, s, s, s)
16+
case 11 => (s, s, s, s, s, s, s, s, s, s, s, s)
17+
case 12 => (s, s, s, s, s, s, s, s, s, s, s, s, s)
18+
case 13 => (s, s, s, s, s, s, s, s, s, s, s, s, s, s)
19+
case 14 => (s, s, s, s, s, s, s, s, s, s, s, s, s, s, s)
20+
case 15 => (s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s)
21+
case 16 => (s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s)
22+
case 17 => (s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s)
23+
case 18 => (s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s)
24+
case 19 => (s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s)
25+
case 20 => (s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s)
26+
case 21 => (s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s)
27+
// case 22 => (s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s)
28+
}
29+
}
30+
}

0 commit comments

Comments
 (0)