From b12ffaadedcd12627a768517beaebfe1bf6fc74e Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Thu, 26 Mar 2020 13:40:18 +0100 Subject: [PATCH] Fix #8598: Refinements cannot have default arguments --- compiler/src/dotty/tools/dotc/parsing/Parsers.scala | 2 ++ tests/neg/default-arg-in-refinement.scala | 1 + 2 files changed, 3 insertions(+) create mode 100644 tests/neg/default-arg-in-refinement.scala diff --git a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala index 479324873cdd..dc4d777bfb5e 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala @@ -3771,6 +3771,8 @@ object Parsers { val problem = tree match case tree: MemberDef if !(tree.mods.flags & ModifierFlags).isEmpty => i"refinement cannot be ${(tree.mods.flags & ModifierFlags).flagStrings().mkString("`", "`, `", "`")}" + case tree: DefDef if tree.vparamss.exists(_.exists(!_.rhs.isEmpty)) => + i"refinement cannot have default arguments" case tree: ValOrDefDef => if tree.rhs.isEmpty then "" else "refinement in cannot have a right-hand side" diff --git a/tests/neg/default-arg-in-refinement.scala b/tests/neg/default-arg-in-refinement.scala new file mode 100644 index 000000000000..9ae84b25e0f8 --- /dev/null +++ b/tests/neg/default-arg-in-refinement.scala @@ -0,0 +1 @@ +def foo[T <: AnyRef { def bar(a: Int = 0): Unit }](t: T): Unit = t.bar // error // error \ No newline at end of file