Skip to content

Commit 80ca4c9

Browse files
committed
Refine minimize condition
1 parent 26576dc commit 80ca4c9

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3930,6 +3930,10 @@ object Types {
39303930
def hasLowerBound(implicit ctx: Context): Boolean =
39313931
!ctx.typerState.constraint.entry(origin).loBound.isBottomType
39323932

3933+
/** For uninstantiated type variables: Is the upper bound different from Any? */
3934+
def hasUpperBound(implicit ctx: Context): Boolean =
3935+
!ctx.typerState.constraint.entry(origin).hiBound.isRef(defn.AnyClass)
3936+
39333937
/** Unwrap to instance (if instantiated) or origin (if not), until result
39343938
* is no longer a TypeVar
39353939
*/

compiler/src/dotty/tools/dotc/typer/Inferencing.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,9 @@ object Inferencing {
111111
def avoidBottom =
112112
!force.allowBottom &&
113113
defn.isBottomType(ctx.typeComparer.approximation(tvar.origin, fromBelow = true))
114-
def preferMin = (force.minimizeAll || variance >= 0) && !avoidBottom
114+
def preferMin =
115+
force.minimizeAll && (!avoidBottom || !tvar.hasUpperBound)
116+
|| variance >= 0 && !avoidBottom
115117
if (direction != 0) instantiate(tvar, direction < 0)
116118
else if (preferMin) instantiate(tvar, fromBelow = true)
117119
else toMaximize = true

0 commit comments

Comments
 (0)