File tree Expand file tree Collapse file tree 2 files changed +7
-6
lines changed
compiler/src/dotty/tools/dotc Expand file tree Collapse file tree 2 files changed +7
-6
lines changed Original file line number Diff line number Diff line change @@ -689,7 +689,8 @@ class SpaceEngine(implicit ctx: Context) extends SpaceLogic {
689689 tvar =>
690690 ! (ctx.typerState.constraint.entry(tvar.origin) `eq` tvar.origin.underlying) ||
691691 (tvar `eq` removeThisType.prefixTVar),
692- minimizeAll = false
692+ minimizeAll = false ,
693+ maximizeAll = true
693694 )
694695
695696 // If parent contains a reference to an abstract type, then we should
Original file line number Diff line number Diff line change @@ -114,7 +114,7 @@ object Inferencing {
114114 else {
115115 val minimize =
116116 force.minimizeAll ||
117- variance >= 0 && ! (
117+ ! force.maximizeAll && variance >= 0 && ! (
118118 force == ForceDegree .noBottom &&
119119 defn.isBottomType(ctx.typeComparer.approximation(tvar.origin, fromBelow = true )))
120120 if (minimize) instantiate(tvar, fromBelow = true )
@@ -466,9 +466,9 @@ trait Inferencing { this: Typer =>
466466
467467/** An enumeration controlling the degree of forcing in "is-dully-defined" checks. */
468468@ sharable object ForceDegree {
469- class Value (val appliesTo : TypeVar => Boolean , val minimizeAll : Boolean )
470- val none = new Value (_ => false , minimizeAll = false )
471- val all = new Value (_ => true , minimizeAll = false )
472- val noBottom = new Value (_ => true , minimizeAll = false )
469+ class Value (val appliesTo : TypeVar => Boolean , val minimizeAll : Boolean , val maximizeAll : Boolean = false )
470+ val none = new Value (_ => false , minimizeAll = false , maximizeAll = false )
471+ val all = new Value (_ => true , minimizeAll = false , maximizeAll = false )
472+ val noBottom = new Value (_ => true , minimizeAll = false , maximizeAll = false )
473473}
474474
You can’t perform that action at this time.
0 commit comments