summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@epfl.ch>2011-03-22 15:43:28 +0000
committerAdriaan Moors <adriaan.moors@epfl.ch>2011-03-22 15:43:28 +0000
commit8cbc17e8f18910fe5f06aea18feeb04593bbeed2 (patch)
treed16f0a30b1f708249add572b0c5720170c9eb7c6
parentad8efdf707109e357e7d5cbd241661d813921f6b (diff)
downloadscala-8cbc17e8f18910fe5f06aea18feeb04593bbeed2.tar.gz
scala-8cbc17e8f18910fe5f06aea18feeb04593bbeed2.tar.bz2
scala-8cbc17e8f18910fe5f06aea18feeb04593bbeed2.zip
closes #4345.
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/RefChecks.scala2
-rw-r--r--test/files/pos/t4345.scala7
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