Skip to content

Commit c27107b

Browse files
authored
Merge pull request #13744 from som-snytt/issue/13019
Can mark var implementation as override
2 parents f031f2e + d45fbe8 commit c27107b

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -466,8 +466,7 @@ object RefChecks {
466466
overrideError("needs `override` modifier")
467467
else if (other.is(AbsOverride) && other.isIncompleteIn(clazz) && !member.is(AbsOverride))
468468
overrideError("needs `abstract override` modifiers")
469-
else if (member.is(Override) && other.is(Accessor) &&
470-
other.accessedFieldOrGetter.is(Mutable, butNot = Lazy))
469+
else if member.is(Override) && other.is(Accessor, butNot = Deferred) && other.accessedFieldOrGetter.is(Mutable, butNot = Lazy) then
471470
overrideError("cannot override a mutable variable")
472471
else if (member.isAnyOverride &&
473472
!(member.owner.thisType.baseClasses exists (_ isSubClass other.owner)) &&

tests/pos/i13019.scala

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
2+
trait Ok1 { var i: Int }
3+
class Ok1C extends Ok1 { var i: Int = 1 }
4+
5+
trait Ok2 {
6+
def i: Int
7+
def i_=(v: Int): Unit
8+
}
9+
class Ok2C extends Ok2 { override var i: Int = 1 }
10+
11+
// was: variable i of type Int cannot override a mutable variable
12+
trait NotOk {var i: Int}
13+
class NotOkC extends NotOk { override var i: Int = 1 }

0 commit comments

Comments
 (0)