Skip to content

Commit fede6fd

Browse files
Harden canAssign (#15963)
Fixes #15897
2 parents e6558e5 + a08789a commit fede6fd

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -989,7 +989,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
989989

990990
def canAssign(sym: Symbol) =
991991
sym.is(Mutable, butNot = Accessor) ||
992-
ctx.owner.isPrimaryConstructor && !sym.is(Method) && sym.owner == ctx.owner.owner ||
992+
ctx.owner.isPrimaryConstructor && !sym.is(Method) && sym.maybeOwner == ctx.owner.owner ||
993993
// allow assignments from the primary constructor to class fields
994994
ctx.owner.name.is(TraitSetterName) || ctx.owner.isStaticConstructor
995995

tests/neg/i15897.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
object O {
2+
class AC(code: => Unit)
3+
4+
val action = new AC({mode = ???}) {} // error
5+
6+
def mode: AnyRef = ???
7+
def mode=(em: AnyRef): Unit = {} // error // error // error
8+
}

tests/pos/i15897.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
object O {
2+
class AC(code: => Unit)
3+
4+
val action = new AC({mode = ???}) {}
5+
6+
def mode: AnyRef = ???
7+
def mode_=(em: AnyRef): Unit = {}
8+
}

0 commit comments

Comments
 (0)