Skip to content

Commit 9be0f6f

Browse files
committed
Translate local roots when doing override checks
1 parent 388349a commit 9be0f6f

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import config.SourceVersion.{`3.0`, `future`}
2020
import config.Printers.refcheck
2121
import reporting._
2222
import Constants.Constant
23-
import cc.{mapRoots, localRoot, isCaptureChecking}
23+
import cc.{mapRoots, localRoot, isCaptureChecking, isLevelOwner}
2424

2525
object RefChecks {
2626
import tpd._
@@ -269,7 +269,7 @@ object RefChecks {
269269
if dcl.is(Deferred) then
270270
for other <- dcl.allOverriddenSymbols do
271271
if !other.is(Deferred) then
272-
checkOverride(checkSubType, dcl, other)
272+
checkOverride(subtypeChecker, dcl, other)
273273
end checkAll
274274
end OverridingPairsChecker
275275

@@ -375,7 +375,11 @@ object RefChecks {
375375
def memberTp(self: Type) =
376376
if (member.isClass) TypeAlias(member.typeRef.EtaExpand(member.typeParams))
377377
else self.memberInfo(member)
378-
def otherTp(self: Type) = self.memberInfo(other)
378+
def otherTp(self: Type) =
379+
val info = self.memberInfo(other)
380+
if isCaptureChecking && member.isLevelOwner && other.isLevelOwner
381+
then info.substSym(other.localRoot :: Nil, member.localRoot :: Nil)
382+
else info
379383

380384
refcheck.println(i"check override ${infoString(member)} overriding ${infoString(other)}")
381385

0 commit comments

Comments
 (0)