Skip to content

Commit 3c9a2ff

Browse files
committed
Avoid weird Ranges of TypeBounds??
1 parent 5f51f5f commit 3c9a2ff

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5886,14 +5886,18 @@ object Types {
58865886
if (distributeArgs(args, tp.tyconTypeParams))
58875887
range(tp.derivedAppliedType(tycon, loBuf.toList),
58885888
tp.derivedAppliedType(tycon, hiBuf.toList))
5889-
else if tycon.isLambdaSub then
5889+
else if tycon.isLambdaSub || args.exists(isRangeOfNonTermTypes) then
58905890
range(defn.NothingType, defn.AnyType)
58915891
else
58925892
// See lampepfl/dotty#14152
58935893
range(defn.NothingType, tp.derivedAppliedType(tycon, args.map(rangeToBounds)))
58945894
else tp.derivedAppliedType(tycon, args)
58955895
}
58965896

5897+
private def isRangeOfNonTermTypes(tp: Type): Boolean = tp match
5898+
case Range(lo, hi) => !lo.isInstanceOf[TermType] || !hi.isInstanceOf[TermType]
5899+
case _ => false
5900+
58975901
override protected def derivedAndType(tp: AndType, tp1: Type, tp2: Type): Type =
58985902
if (isRange(tp1) || isRange(tp2)) range(lower(tp1) & lower(tp2), upper(tp1) & upper(tp2))
58995903
else tp.derivedAndType(tp1, tp2)

0 commit comments

Comments
 (0)