Skip to content

Commit 715bca8

Browse files
committed
Drop failsafe checkNonCyclic and document GADT fullBounds change
1 parent 1389bb8 commit 715bca8

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,13 @@ class GadtConstraint private (
7777
sym.name.is(NameKinds.UniqueName) && {
7878
val hi = sym.info.hiBound
7979
!hi.isExactlyAny && self <:< hi
80+
// drop any lower param that is a GADT symbol
81+
// and is upper-bounded by a non-Any super-type of the original parameter
82+
// e.g. in pos/i14287.min
83+
// B$1 had info <: X and fullBounds >: B$2 <: X, and
84+
// B$2 had info <: B$1 and fullBounds <: B$1
85+
// We can use the info of B$2 to drop the lower-bound of B$1
86+
// and return non-bidirectional bounds B$1 <: X and B$2 <: B$1.
8087
}
8188
}.foldLeft(nonParamBounds(param).lo) {
8289
(t, u) => t | externalize(u)
@@ -88,7 +95,7 @@ class GadtConstraint private (
8895
val sym = paramSymbol(p)
8996
sym.name.is(NameKinds.UniqueName) && {
9097
val lo = sym.info.loBound
91-
!lo.isExactlyNothing && lo <:< self
98+
!lo.isExactlyNothing && lo <:< self // same as fullLowerBounds
9299
}
93100
}.foldLeft(nonParamBounds(param).hi) { (t, u) =>
94101
val eu = externalize(u)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1765,7 +1765,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
17651765
else report.error(new DuplicateBind(b, cdef), b.srcPos)
17661766
if (!ctx.isAfterTyper) {
17671767
val bounds = ctx.gadt.fullBounds(sym)
1768-
if (bounds != null) sym.info = checkNonCyclic(sym, bounds, reportErrors = true)
1768+
if (bounds != null) sym.info = bounds
17691769
}
17701770
b
17711771
case t: UnApply if t.symbol.is(Inline) => Inlines.inlinedUnapply(t)

0 commit comments

Comments
 (0)