Skip to content

Commit

Permalink
Widen skolem types when adding parent refinements (#22488)
Browse files Browse the repository at this point in the history
closes #22456
  • Loading branch information
KacperFKorban authored Feb 6, 2025
1 parent 0ea05aa commit ddb4bd1
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 2 deletions.
7 changes: 5 additions & 2 deletions compiler/src/dotty/tools/dotc/core/NamerOps.scala
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,17 @@ object NamerOps:
*/
extension (tp: Type)
def separateRefinements(cls: ClassSymbol, refinements: mutable.LinkedHashMap[Name, Type] | Null)(using Context): Type =
val widenSkolemsMap = new TypeMap:
def apply(tp: Type) = mapOver(tp.widenSkolem)
tp match
case RefinedType(tp1, rname, rinfo) =>
try tp1.separateRefinements(cls, refinements)
finally
if refinements != null then
val rinfo1 = widenSkolemsMap(rinfo)
refinements(rname) = refinements.get(rname) match
case Some(tp) => tp & rinfo
case None => rinfo
case Some(tp) => tp & rinfo1
case None => rinfo1
case tp @ AnnotatedType(tp1, ann) =>
tp.derivedAnnotatedType(tp1.separateRefinements(cls, refinements), ann)
case tp: RecType =>
Expand Down
4 changes: 4 additions & 0 deletions tests/pos/i22456.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import language.experimental.modularity

class T(tracked val y: Int)
class C(tracked val x: Int) extends T(x + 1)

0 comments on commit ddb4bd1

Please sign in to comment.