diff --git a/compiler/src/dotty/tools/dotc/core/NamerOps.scala b/compiler/src/dotty/tools/dotc/core/NamerOps.scala index 363a01665564..10fc6a9fa46e 100644 --- a/compiler/src/dotty/tools/dotc/core/NamerOps.scala +++ b/compiler/src/dotty/tools/dotc/core/NamerOps.scala @@ -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 => diff --git a/tests/pos/i22456.scala b/tests/pos/i22456.scala new file mode 100644 index 000000000000..ed1241bc4b39 --- /dev/null +++ b/tests/pos/i22456.scala @@ -0,0 +1,4 @@ +import language.experimental.modularity + +class T(tracked val y: Int) +class C(tracked val x: Int) extends T(x + 1)