Skip to content

Commit 92ee563

Browse files
committed
Generalize base class handling
1 parent 52e7962 commit 92ee563

File tree

2 files changed

+20
-14
lines changed

2 files changed

+20
-14
lines changed

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

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1037,20 +1037,17 @@ class TypeComparer(using val comparerCtx: Context) extends ConstraintHandling wi
10371037
case _ => false
10381038
}
10391039

1040-
tp1.widen match {
1041-
case tp1w: AppliedType => appOK(tp1w)
1042-
case tp1w =>
1043-
tp1w.typeSymbol.isClass && {
1044-
val classBounds = tycon2.classSymbols
1045-
def liftToBase(bcs: List[ClassSymbol]): Boolean = bcs match {
1046-
case bc :: bcs1 =>
1047-
classBounds.exists(bc.derivesFrom) && appOK(nonExprBaseType(tp1, bc))
1048-
|| liftToBase(bcs1)
1049-
case _ =>
1050-
false
1051-
}
1052-
liftToBase(tp1w.baseClasses)
1053-
}
1040+
val tp1w = tp1.widen
1041+
appOK(tp1w) || tp1w.typeSymbol.isClass && {
1042+
val classBounds = tycon2.classSymbols
1043+
def liftToBase(bcs: List[ClassSymbol]): Boolean = bcs match {
1044+
case bc :: bcs1 =>
1045+
classBounds.exists(bc.derivesFrom) && appOK(nonExprBaseType(tp1, bc))
1046+
|| liftToBase(bcs1)
1047+
case _ =>
1048+
false
1049+
}
1050+
liftToBase(tp1w.baseClasses)
10541051
}
10551052
}
10561053

tests/pos/t2712-8.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Two[A, B]
2+
class One[A] extends Two[A, A]
3+
4+
object Test {
5+
def foo[F[_, _]](x: F[Int, Int]) = x
6+
7+
val t: One[Int] = ???
8+
foo(t)
9+
}

0 commit comments

Comments
 (0)