diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-01-09 14:44:47 -0800 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-01-09 14:58:25 -0800 |
commit | 8fb19b132579b7ddb9dd12ae829451dcf9d91332 (patch) | |
tree | 2cb58cb3d90497d2086f66c0a195dfb1a04efce6 /test/files/neg/t5189_inferred.scala | |
parent | 1381cda86ddeca1b9829a9c53ff9372cfd816735 (diff) | |
download | scala-8fb19b132579b7ddb9dd12ae829451dcf9d91332.tar.gz scala-8fb19b132579b7ddb9dd12ae829451dcf9d91332.tar.bz2 scala-8fb19b132579b7ddb9dd12ae829451dcf9d91332.zip |
SI-5189 detect unsoundness when inferring type of match
GADT skolems encode type slack that results from pattern matching on variant type constructors
I thought they would not longer be relevant after cases have been typed,
and since they caused weird issues with the old pattern matcher, I deskolemized in typedCase
however, when we don't have an expected type for the match, we need to keep the skolems around
until the skolemized type makes it out of the match and it becomes the result of type inference for that match
when you do have an expected type, it will propagate to the case-level and the confrontation will thus
already take place when typing individual cases
Diffstat (limited to 'test/files/neg/t5189_inferred.scala')
-rw-r--r-- | test/files/neg/t5189_inferred.scala | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/test/files/neg/t5189_inferred.scala b/test/files/neg/t5189_inferred.scala new file mode 100644 index 0000000000..e4e8765445 --- /dev/null +++ b/test/files/neg/t5189_inferred.scala @@ -0,0 +1,8 @@ +trait Covariant[+A] +case class Invariant[A](xs: Array[A]) extends Covariant[A] + +class Test { + val arr = Array("abc") + def f[A](v: Covariant[A]) /*inferred!*/ = v match { case Invariant(xs) => xs } + f(Invariant(arr): Covariant[Any])(0) = Nil +}
\ No newline at end of file |