diff options
author | Adriaan Moors <adriaan.moors@epfl.ch> | 2011-03-22 15:43:28 +0000 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@epfl.ch> | 2011-03-22 15:43:28 +0000 |
commit | 8cbc17e8f18910fe5f06aea18feeb04593bbeed2 (patch) | |
tree | d16f0a30b1f708249add572b0c5720170c9eb7c6 | |
parent | ad8efdf707109e357e7d5cbd241661d813921f6b (diff) | |
download | scala-8cbc17e8f18910fe5f06aea18feeb04593bbeed2.tar.gz scala-8cbc17e8f18910fe5f06aea18feeb04593bbeed2.tar.bz2 scala-8cbc17e8f18910fe5f06aea18feeb04593bbeed2.zip |
closes #4345.
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | 2 | ||||
-rw-r--r-- | test/files/pos/t4345.scala | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala index 3d769f6cfd..63542e6dd5 100644 --- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala +++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala @@ -688,7 +688,7 @@ abstract class RefChecks extends InfoTransform { !(tvar.isTypeParameterOrSkolem && sym.isTypeParameterOrSkolem && tvar.owner == sym.owner)) state = -state; else if (!sym.owner.isClass || - sym.isTerm && ((sym.isPrivateLocal || sym.isProtectedLocal) && !(escapedPrivateLocals contains sym))) { + sym.isTerm && ((sym.isPrivateLocal || sym.isProtectedLocal || sym.isSuperAccessor /* super accessors are implicitly local #4345*/) && !(escapedPrivateLocals contains sym))) { // return AnyVariance if `sym` is local to a term // or is private[this] or protected[this] state = AnyVariance diff --git a/test/files/pos/t4345.scala b/test/files/pos/t4345.scala new file mode 100644 index 0000000000..59de1eadd3 --- /dev/null +++ b/test/files/pos/t4345.scala @@ -0,0 +1,7 @@ +trait C1[+A, +CC[X]] { + protected[this] def f: A => CC[A] = sys.error("") +} + +trait C2[+A, +CC[X]] extends C1[A, CC] { + override protected[this] def f = super.f +}
\ No newline at end of file |