summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/RefChecks.scala3
-rw-r--r--test/files/pos/t5178.scala11
2 files changed, 13 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
index c3c353385c..1c4355b3bd 100644
--- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
@@ -364,7 +364,8 @@ abstract class RefChecks extends InfoTransform with reflect.internal.transform.R
overrideError("cannot be used here - classes can only override abstract types");
} else if (other.isFinal) { // (1.2)
overrideError("cannot override final member");
- } else if (!other.isDeferred && !member.isAnyOverride) {
+ // synthetic exclusion needed for (at least) default getters.
+ } else if (!other.isDeferred && !member.isAnyOverride && !member.isSynthetic) {
overrideError("needs `override' modifier");
} else if (other.isAbstractOverride && other.isIncompleteIn(clazz) && !member.isAbstractOverride) {
overrideError("needs `abstract override' modifiers")
diff --git a/test/files/pos/t5178.scala b/test/files/pos/t5178.scala
new file mode 100644
index 0000000000..26c008d66f
--- /dev/null
+++ b/test/files/pos/t5178.scala
@@ -0,0 +1,11 @@
+abstract class FileOps {
+ def withLock[R](start: Long = 0): Option[R]
+}
+
+trait DefaultFileOps {
+ self: DefaultPath =>
+
+ override def withLock[R](start: Long = 5): Option[R] = None
+}
+
+class DefaultPath extends FileOps with DefaultFileOps { }