Skip to content

Commit

Permalink
Revert "Approximate MatchTypes with lub of case bodies, if non-recurs…
Browse files Browse the repository at this point in the history
…ive" in 3.5.1 (#21267)

Reverts #19761 in 3.5.1-RC2 as discussed in #21258 and accepted by the
core compiler team.
  • Loading branch information
WojciechMazur authored Jul 29, 2024
2 parents 49f22bf + 8b82e69 commit 299c0b7
Show file tree
Hide file tree
Showing 7 changed files with 3 additions and 43 deletions.
7 changes: 0 additions & 7 deletions compiler/src/dotty/tools/dotc/core/TypeComparer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2915,13 +2915,6 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
tp.tryCompiletimeConstantFold
case tp: HKTypeLambda =>
tp
case tp: ParamRef =>
val st = tp.superTypeNormalized
if st.exists then
disjointnessBoundary(st)
else
// workaround for when ParamRef#underlying returns NoType
defn.AnyType
case tp: TypeProxy =>
disjointnessBoundary(tp.superTypeNormalized)
case tp: WildcardType =>
Expand Down
10 changes: 1 addition & 9 deletions compiler/src/dotty/tools/dotc/typer/Typer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2604,15 +2604,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
report.error(MatchTypeScrutineeCannotBeHigherKinded(sel1Tpe), sel1.srcPos)
val pt1 = if (bound1.isEmpty) pt else bound1.tpe
val cases1 = tree.cases.mapconserve(typedTypeCase(_, sel1Tpe, pt1))
val bound2 = if tree.bound.isEmpty then
val lub = cases1.foldLeft(defn.NothingType: Type): (acc, case1) =>
if !acc.exists then NoType
else if case1.body.tpe.isProvisional then NoType
else acc | case1.body.tpe
if lub.exists then TypeTree(lub, inferred = true)
else bound1
else bound1
assignType(cpy.MatchTypeTree(tree)(bound2, sel1, cases1), bound2, sel1, cases1)
assignType(cpy.MatchTypeTree(tree)(bound1, sel1, cases1), bound1, sel1, cases1)
}

def typedByNameTypeTree(tree: untpd.ByNameTypeTree)(using Context): ByNameTypeTree = tree.result match
Expand Down
2 changes: 1 addition & 1 deletion tests/pos/13633.scala
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ object Sums extends App:

type Reverse[A] = ReverseLoop[A, EmptyTuple]

type PlusTri[A, B, C] <: Tuple = (A, B, C) match
type PlusTri[A, B, C] = (A, B, C) match
case (false, false, false) => (false, false)
case (true, false, false) | (false, true, false) | (false, false, true) => (false, true)
case (true, true, false) | (true, false, true) | (false, true, true) => (true, false)
Expand Down
7 changes: 0 additions & 7 deletions tests/pos/Tuple.Drop.scala

This file was deleted.

7 changes: 0 additions & 7 deletions tests/pos/Tuple.Elem.scala

This file was deleted.

11 changes: 0 additions & 11 deletions tests/pos/i19710.scala

This file was deleted.

2 changes: 1 addition & 1 deletion tests/run-macros/type-show/Test_2.scala
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ object Test {
"""TypeRef(ThisType(TypeRef(NoPrefix(), "scala")), "Nothing"), """+
"""TypeRef(ThisType(TypeRef(NoPrefix(), "scala")), "Any"))), """+
"""MatchType("""+
"""TypeRef(TermRef(ThisType(TypeRef(NoPrefix(), "<root>")), "scala"), "Int"), """+ // match type bound
"""TypeRef(ThisType(TypeRef(NoPrefix(), "scala")), "Any"), """+ // match type bound
"""ParamRef(binder, 0), """+
"""List("""+
"""MatchCase("""+
Expand Down

0 comments on commit 299c0b7

Please sign in to comment.