File tree Expand file tree Collapse file tree 2 files changed +7
-1
lines changed
compiler/src/dotty/tools/dotc Expand file tree Collapse file tree 2 files changed +7
-1
lines changed Original file line number Diff line number Diff 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 */
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments