Skip to content

Commit 8f76d63

Browse files
committed
Don't recheck inherited trait parameters during capture checking
The logic gets refused by the added capture refinements.
1 parent e2c9dc0 commit 8f76d63

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

compiler/src/dotty/tools/dotc/cc/CheckCaptures.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,6 +1122,8 @@ class CheckCaptures extends Recheck, SymTransformer:
11221122

11231123
override def needsCheck(overriding: Symbol, overridden: Symbol)(using Context): Boolean =
11241124
!setup.isPreCC(overriding) && !setup.isPreCC(overridden)
1125+
1126+
override def checkInheritedTraitParameters: Boolean = false
11251127
end OverridingPairsCheckerCC
11261128

11271129
def traverse(t: Tree)(using Context) =

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,9 @@ object RefChecks {
267267
if !other.is(Deferred) then
268268
checkOverride(subtypeChecker, dcl, other)
269269
end checkAll
270+
271+
// Disabled for capture checking since traits can get different parameter refinements
272+
def checkInheritedTraitParameters: Boolean = true
270273
end OverridingPairsChecker
271274

272275
/** 1. Check all members of class `clazz` for overriding conditions.
@@ -851,7 +854,7 @@ object RefChecks {
851854
checkCaseClassInheritanceInvariant()
852855
}
853856

854-
if (!clazz.is(Trait)) {
857+
if (!clazz.is(Trait) && checker.checkInheritedTraitParameters) {
855858
// check that parameterized base classes and traits are typed in the same way as from the superclass
856859
// I.e. say we have
857860
//

0 commit comments

Comments
 (0)