Skip to content

Commit b971bf5

Browse files
Fix #8313: special case typeparamCorrespondsToField
1 parent 811dc19 commit b971bf5

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2193,13 +2193,15 @@ class TypeComparer(initctx: Context) extends ConstraintHandling[AbsentContext] w
21932193
/** Returns last check's debug mode, if explicitly enabled. */
21942194
def lastTrace(): String = ""
21952195

2196+
/** Does `tycon` has a field with type `tparam`? Special cased for `scala.*:`
2197+
* as that type is artificially added to tuples. */
21962198
private def typeparamCorrespondsToField(tycon: Type, tparam: TypeParamInfo): Boolean =
21972199
productSelectorTypes(tycon, null).exists {
21982200
case tp: TypeRef =>
21992201
tp.designator.eq(tparam) // Bingo!
22002202
case _ =>
22012203
false
2202-
}
2204+
} || tycon.derivesFrom(defn.PairClass)
22032205

22042206
/** Is `tp` an empty type?
22052207
*

tests/pos/8313.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
object Test {
2+
type DU[A <: Tuple] <: Tuple = A match {
3+
case Unit => Unit
4+
case Unit *: tl => DU[tl]
5+
case hd *: tl => hd *: DU[tl]
6+
}
7+
8+
(1, 2): DU[Int *: Int *: Unit]
9+
}

0 commit comments

Comments
 (0)