Skip to content

Commit e8c83f3

Browse files
committed
fix test
1 parent b688f3d commit e8c83f3

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

compiler/src/dotty/tools/dotc/transform/IsInstanceOfChecker.scala

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -101,17 +101,24 @@ object Checkable {
101101

102102
P1 <:< X // may fail, ignore
103103

104-
tvars.foreach { case tvar: TypeVar =>
105-
val bounds = ctx.typerState.constraint.entry(tvar.origin)
106-
if (bounds.loBound =:= bounds.hiBound)
107-
tvar.instantiateWith(bounds.loBound)
108-
else if (tycon.classSymbol.is(Final)) // 3324g.scala cannot happen because of final
109-
instantiateSelected(P1, tvar :: Nil)
110-
else { // see 3324g.scala
111-
val wildCard = ctx.newSymbol(ctx.owner, WildcardParamName.fresh().toTypeName, Case, tvar.origin.underlying, coord = pos)
112-
tvar.instantiateWith(wildCard.typeRef)
104+
// 3324g.scala cannot happen in such cases
105+
def canInstantiate =
106+
tycon.classSymbol.is(Final) ||
107+
!X.classSymbol.is(Trait) ||
108+
X.classSymbol.typeParams.isEmpty
109+
110+
if (canInstantiate)
111+
maximizeType(P1, pos, fromScala2x = true) // use `fromScala2x = true` to force instantiate invariant tvars
112+
else
113+
tvars.foreach { case tvar: TypeVar =>
114+
val bounds = ctx.typerState.constraint.entry(tvar.origin)
115+
if (bounds.loBound =:= bounds.hiBound)
116+
tvar.instantiateWith(bounds.loBound)
117+
else { // 3324g.scala
118+
val wildCard = ctx.newSymbol(ctx.owner, WildcardParamName.fresh().toTypeName, Case, tvar.origin.underlying, coord = pos)
119+
tvar.instantiateWith(wildCard.typeRef)
120+
}
113121
}
114-
}
115122

116123
val res = P1 <:< P
117124
debug.println("P1 : " + P1)

0 commit comments

Comments
 (0)