diff options
author | Josh Suereth <Joshua.Suereth@gmail.com> | 2012-09-06 10:29:47 -0700 |
---|---|---|
committer | Josh Suereth <Joshua.Suereth@gmail.com> | 2012-09-06 10:29:47 -0700 |
commit | 11f51ec2ff62d860eb5a1fd710703262f152c7ec (patch) | |
tree | a121051b5354a0c63570b73a61eeaff67e152115 /test/files/neg | |
parent | ab5a9bbfb1e89764dacf6b5ea357a54ea4bb0479 (diff) | |
parent | d614ae6e76249ab746a3e78af6e216301ba9bdb4 (diff) | |
download | scala-11f51ec2ff62d860eb5a1fd710703262f152c7ec.tar.gz scala-11f51ec2ff62d860eb5a1fd710703262f152c7ec.tar.bz2 scala-11f51ec2ff62d860eb5a1fd710703262f152c7ec.zip |
Merge pull request #1168 from retronym/ticket/6258-2
SI-6258 Reject partial funs with undefined param types
Diffstat (limited to 'test/files/neg')
-rw-r--r-- | test/files/neg/t6258.check | 16 | ||||
-rw-r--r-- | test/files/neg/t6258.scala | 25 |
2 files changed, 41 insertions, 0 deletions
diff --git a/test/files/neg/t6258.check b/test/files/neg/t6258.check new file mode 100644 index 0000000000..73363d8280 --- /dev/null +++ b/test/files/neg/t6258.check @@ -0,0 +1,16 @@ +t6258.scala:2: error: missing parameter type for expanded function +The argument types of an anonymous function must be fully known. (SLS 8.5) +Expected type was: PartialFunction[?, Int] + val f : PartialFunction[_, Int] = { case a : Int => a } // undefined param + ^ +t6258.scala:5: error: missing parameter type for expanded function +The argument types of an anonymous function must be fully known. (SLS 8.5) +Expected type was: PartialFunction[?,Int] + foo { case a : Int => a } // undefined param + ^ +t6258.scala:22: error: missing parameter type for expanded function +The argument types of an anonymous function must be fully known. (SLS 8.5) +Expected type was: PartialFunction[?,Any] + bar[M[Any]] (foo { // undefined param + ^ +three errors found diff --git a/test/files/neg/t6258.scala b/test/files/neg/t6258.scala new file mode 100644 index 0000000000..5046a4750a --- /dev/null +++ b/test/files/neg/t6258.scala @@ -0,0 +1,25 @@ +object Test { + val f : PartialFunction[_, Int] = { case a : Int => a } // undefined param + + def foo[A](pf: PartialFunction[A, Int]) {}; + foo { case a : Int => a } // undefined param + + val g : PartialFunction[Int, _] = { case a : Int => a } // okay +} + + +// Another variation, seen in the wild with Specs2. +class X { + trait Matcher[-T] + + def bar[T](m: Matcher[T]) = null + def bar[T](i: Int) = null + + def foo[T](p: PartialFunction[T, Any]): Matcher[T] = null + + case class M[X](a: X) + + bar[M[Any]] (foo { // undefined param + case M(_) => null + }) +} |