summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala5
-rw-r--r--test/files/neg/t5078.check13
-rw-r--r--test/files/neg/t5078.scala11
3 files changed, 28 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index 0ecb8efea8..7373501951 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -2588,7 +2588,7 @@ trait Typers extends Modes with Adaptations {
if (args.length > MaxTupleArity)
error(fun.pos, "too many arguments for unapply pattern, maximum = "+MaxTupleArity)
- def freshArgType(tp: Type): (Type, List[Symbol]) = (tp: @unchecked) match {
+ def freshArgType(tp: Type): (Type, List[Symbol]) = tp match {
case MethodType(param :: _, _) =>
(param.tpe, Nil)
case PolyType(tparams, restype) =>
@@ -2597,6 +2597,9 @@ trait Typers extends Modes with Adaptations {
case OverloadedType(_, _) =>
error(fun.pos, "cannot resolve overloaded unapply")
(ErrorType, Nil)
+ case _ =>
+ error(fun.pos, "an unapply method must accept a single argument.")
+ (ErrorType, Nil)
}
val unapp = unapplyMember(otpe)
diff --git a/test/files/neg/t5078.check b/test/files/neg/t5078.check
new file mode 100644
index 0000000000..8f66445b03
--- /dev/null
+++ b/test/files/neg/t5078.check
@@ -0,0 +1,13 @@
+t5078.scala:7: error: an unapply method must accept a single argument.
+ val Foo(x1) = 1
+ ^
+t5078.scala:7: error: recursive value x1 needs type
+ val Foo(x1) = 1
+ ^
+t5078.scala:8: error: an unapply method must accept a single argument.
+ val Foo2(y2) = 2
+ ^
+t5078.scala:8: error: recursive value y2 needs type
+ val Foo2(y2) = 2
+ ^
+four errors found
diff --git a/test/files/neg/t5078.scala b/test/files/neg/t5078.scala
new file mode 100644
index 0000000000..2e727e773d
--- /dev/null
+++ b/test/files/neg/t5078.scala
@@ -0,0 +1,11 @@
+object Foo { def unapply: Option[Int] = Some(42) }
+object Foo2 { def unapply(): Option[Int] = Some(42) }
+
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val Foo(x1) = 1
+ val Foo2(y2) = 2
+ ()
+ }
+}