diff --git a/compiler/src/dotty/tools/dotc/transform/AccessProxies.scala b/compiler/src/dotty/tools/dotc/transform/AccessProxies.scala index a59ce4d79a48..5908bce97994 100644 --- a/compiler/src/dotty/tools/dotc/transform/AccessProxies.scala +++ b/compiler/src/dotty/tools/dotc/transform/AccessProxies.scala @@ -76,9 +76,10 @@ abstract class AccessProxies { } /** A fresh accessor symbol */ - private def newAccessorSymbol(owner: Symbol, name: TermName, info: Type, span: Span)(using Context): TermSymbol = { - val sym = newSymbol(owner, name, Synthetic | Method, info, coord = span).entered - if (sym.allOverriddenSymbols.exists(!_.is(Deferred))) sym.setFlag(Override) + private def newAccessorSymbol(owner: Symbol, name: TermName, info: Type, accessed: Symbol)(using Context): TermSymbol = { + val sym = newSymbol(owner, name, Synthetic | Method, info, coord = accessed.span).entered + if accessed.is(Private) then sym.setFlag(Final) + else if sym.allOverriddenSymbols.exists(!_.is(Deferred)) then sym.setFlag(Override) sym } @@ -86,7 +87,7 @@ abstract class AccessProxies { protected def accessorSymbol(owner: Symbol, accessorName: TermName, accessorInfo: Type, accessed: Symbol)(using Context): Symbol = { def refersToAccessed(sym: Symbol) = accessedBy.get(sym).contains(accessed) owner.info.decl(accessorName).suchThat(refersToAccessed).symbol.orElse { - val acc = newAccessorSymbol(owner, accessorName, accessorInfo, accessed.span) + val acc = newAccessorSymbol(owner, accessorName, accessorInfo, accessed) accessedBy(acc) = accessed acc } diff --git a/tests/neg/i15323.scala b/tests/neg/i15323.scala new file mode 100644 index 000000000000..3d25156fbcbf --- /dev/null +++ b/tests/neg/i15323.scala @@ -0,0 +1,11 @@ +class A: + private var x = 0 + inline def f1(): Int = + x += 1; + x + +class B extends A: + private var x = 0 // error + inline def f2(): Int = + x += 1 + x