diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-05-26 17:26:29 +0200 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-06-03 18:11:28 +0200 |
commit | 80d986997e58b5195654b6f9ca8cd81bc62f4bbf (patch) | |
tree | 957545c77742e738f79ee27e56f064f7549d97e7 /test/files/neg | |
parent | 85cd96da352c929ea0ce4ba236730579e09c5c4b (diff) | |
download | scala-80d986997e58b5195654b6f9ca8cd81bc62f4bbf.tar.gz scala-80d986997e58b5195654b6f9ca8cd81bc62f4bbf.tar.bz2 scala-80d986997e58b5195654b6f9ca8cd81bc62f4bbf.zip |
SI-5683 Fail gracefully when transposing a ragged type arg matrix.
The code used to do this, until `transpose` starting throwing IAE
rather than AIOOBE.
Symptomatic treatment only: The reported crasher now infers ill-kinded
type args and reports an error.
Diffstat (limited to 'test/files/neg')
-rw-r--r-- | test/files/neg/t5683.check | 16 | ||||
-rw-r--r-- | test/files/neg/t5683.scala | 23 |
2 files changed, 39 insertions, 0 deletions
diff --git a/test/files/neg/t5683.check b/test/files/neg/t5683.check new file mode 100644 index 0000000000..7c0e50113c --- /dev/null +++ b/test/files/neg/t5683.check @@ -0,0 +1,16 @@ +t5683.scala:12: error: inferred kinds of the type arguments (Object,Int) do not conform to the expected kinds of the type parameters (type M,type B). +Object's type parameters do not match type M's expected parameters: +class Object has no type parameters, but type M has one + val crash: K[StringW,Int,Int] = k{ (y: Int) => null: W[String, Int] } + ^ +t5683.scala:12: error: type mismatch; + found : Int => Test.W[String,Int] + required: Int => M[B] + val crash: K[StringW,Int,Int] = k{ (y: Int) => null: W[String, Int] } + ^ +t5683.scala:12: error: type mismatch; + found : Test.K[M,Int,B] + required: Test.K[Test.StringW,Int,Int] + val crash: K[StringW,Int,Int] = k{ (y: Int) => null: W[String, Int] } + ^ +three errors found diff --git a/test/files/neg/t5683.scala b/test/files/neg/t5683.scala new file mode 100644 index 0000000000..05ab035792 --- /dev/null +++ b/test/files/neg/t5683.scala @@ -0,0 +1,23 @@ +object Test { + trait NT[X] + trait W[W, A] extends NT[Int] + type StringW[T] = W[String, T] + trait K[M[_], A, B] + + def k[M[_], B](f: Int => M[B]): K[M, Int, B] = null + + val okay1: K[StringW,Int,Int] = k{ (y: Int) => null: StringW[Int] } + val okay2 = k[StringW,Int]{ (y: Int) => null: W[String, Int] } + + val crash: K[StringW,Int,Int] = k{ (y: Int) => null: W[String, Int] } + + // remove `extends NT[Int]`, and the last line gives an inference error + // rather than a crash. + // test/files/pos/t5683.scala:12: error: no type parameters for method k: (f: Int => M[B])Test.K[M,Int,B] exist so that it can be applied to arguments (Int => Test.W[String,Int]) + // --- because --- + // argument expression's type is not compatible with formal parameter type; + // found : Int => Test.W[String,Int] + // required: Int => ?M[?B] + // val crash: K[StringW,Int,Int] = k{ (y: Int) => null: W[String, Int] } + // ^ +} |