Skip to content

Commit 296e963

Browse files
committed
add test cases for #3455 #3469
1 parent 9166db3 commit 296e963

File tree

4 files changed

+28
-5
lines changed

4 files changed

+28
-5
lines changed

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -584,10 +584,9 @@ class SpaceEngine(implicit ctx: Context) extends SpaceLogic {
584584
// precondition: `tp1` should have the shape `path.Child`, thus `ThisType` is always covariant
585585
val thisTypeMap = new TypeMap {
586586
def apply(t: Type): Type = t match {
587-
case tp @ ThisType(tref) if !tref.symbol.isStaticOwner && !tref.symbol.is(Module) =>
588-
// TODO: stackoverflow here
589-
// newTypeVar(TypeBounds.upper(mapOver(tp.underlying)))
590-
newTypeVar(TypeBounds.upper(mapOver(tref & tref.classSymbol.asClass.givenSelfType)))
587+
case tp @ ThisType(tref) if !tref.symbol.isStaticOwner =>
588+
if (tref.symbol.is(Module)) mapOver(tref)
589+
else newTypeVar(TypeBounds.upper(tp.underlying))
591590
case _ =>
592591
mapOver(t)
593592
}
@@ -633,7 +632,7 @@ class SpaceEngine(implicit ctx: Context) extends SpaceLogic {
633632
else {
634633
val protoTp2 = typeParamMap(tp2)
635634
if (protoTp1 <:< protoTp2) {
636-
isFullyDefined(protoTp1 & protoTp2, force)
635+
isFullyDefined(AndType(protoTp1, protoTp2), force)
637636
instUndetMap(protoTp1)
638637
}
639638
else {

tests/patmat/3455.check

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
11: Pattern Match Exhaustivity: Decimal

tests/patmat/3455.scala

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
trait AxisCompanion {
2+
sealed trait Format
3+
object Format {
4+
case object Decimal extends Format
5+
case object Integer extends Format
6+
}
7+
}
8+
object Axis extends AxisCompanion
9+
class Axis {
10+
import Axis._
11+
def test( f: Format ) = f match {
12+
case Format.Integer => "Int"
13+
}
14+
}

tests/patmat/3469.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
object O {
2+
sealed trait Trait[+A] { type T }
3+
case class CaseClass[+A](a: A) extends Trait[A] { type T = Nothing }
4+
5+
def id[TT, A](v: Trait[A] { type T = TT }): Trait[A] { type T = TT } =
6+
v match {
7+
case CaseClass(a) => CaseClass(a)
8+
}
9+
}

0 commit comments

Comments
 (0)