diff options
author | Paul Phillips <paulp@improving.org> | 2013-10-03 15:49:24 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2013-10-03 15:49:24 -0700 |
commit | 90a312669b37d6e3e3f08685953ded24759e6102 (patch) | |
tree | d3cb52921c989d91420819fe5452267cda489405 /test/files/pos | |
parent | b9284ac33345d9e654c44af74b5e1c92a37e2c6c (diff) | |
parent | 5708e9d73ba01c286d7155606b72caeab914face (diff) | |
download | scala-90a312669b37d6e3e3f08685953ded24759e6102.tar.gz scala-90a312669b37d6e3e3f08685953ded24759e6102.tar.bz2 scala-90a312669b37d6e3e3f08685953ded24759e6102.zip |
Merge pull request #3005 from paulp/pr/7886
SI-7886 unsoundness in pattern matcher.
Diffstat (limited to 'test/files/pos')
-rw-r--r-- | test/files/pos/gadts2.scala | 2 | ||||
-rw-r--r-- | test/files/pos/pattern-typing.scala | 29 |
2 files changed, 30 insertions, 1 deletions
diff --git a/test/files/pos/gadts2.scala b/test/files/pos/gadts2.scala index fc2a7e4333..d77c8a7ba4 100644 --- a/test/files/pos/gadts2.scala +++ b/test/files/pos/gadts2.scala @@ -4,7 +4,7 @@ object Test { case class MyInt(n: Int) extends Number case class MyDouble(d: Double) extends Number - trait Term[+a] + trait Term[a] case class Cell[a](var x: a) extends Term[a] final case class NumTerm(val n: Number) extends Term[Number] diff --git a/test/files/pos/pattern-typing.scala b/test/files/pos/pattern-typing.scala new file mode 100644 index 0000000000..7286cc38af --- /dev/null +++ b/test/files/pos/pattern-typing.scala @@ -0,0 +1,29 @@ +import scala.language.higherKinds + +trait Bound[B] + +package p1 { + case class Sub[B <: Bound[B]](p: B) + object Test { + def g[A](x: Bound[A]) = () + def f(x: Any) = x match { case Sub(p) => g(p) } + } +} + +package p2 { + trait Traversable[+A] { def head: A = ??? } + trait Seq[+A] extends Traversable[A] { def length: Int = ??? } + + case class SubHK[B <: Bound[B], CC[X] <: Traversable[X]](xs: CC[B]) + class MyBound extends Bound[MyBound] + class MySeq extends Seq[MyBound] + + object Test { + def g[B](x: Bound[B]) = () + + def f1(x: Any) = x match { case SubHK(xs) => xs } + def f2[B <: Bound[B], CC[X] <: Traversable[X]](sub: SubHK[B, CC]): CC[B] = sub match { case SubHK(xs) => xs } + def f3 = g(f1(SubHK(new MySeq)).head) + def f4 = g(f2(SubHK(new MySeq)).head) + } +} |