summaryrefslogtreecommitdiff
path: root/test/files/neg/run-gadts-strict.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2013-10-03 15:49:24 -0700
committerPaul Phillips <paulp@improving.org>2013-10-03 15:49:24 -0700
commit90a312669b37d6e3e3f08685953ded24759e6102 (patch)
treed3cb52921c989d91420819fe5452267cda489405 /test/files/neg/run-gadts-strict.scala
parentb9284ac33345d9e654c44af74b5e1c92a37e2c6c (diff)
parent5708e9d73ba01c286d7155606b72caeab914face (diff)
downloadscala-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/neg/run-gadts-strict.scala')
-rw-r--r--test/files/neg/run-gadts-strict.scala18
1 files changed, 18 insertions, 0 deletions
diff --git a/test/files/neg/run-gadts-strict.scala b/test/files/neg/run-gadts-strict.scala
new file mode 100644
index 0000000000..041d10d4bd
--- /dev/null
+++ b/test/files/neg/run-gadts-strict.scala
@@ -0,0 +1,18 @@
+// A copy of run/gadts.scala, which must fail under -Xstrict-inference.
+abstract class Term[T]
+case class Lit(x: Int) extends Term[Int]
+case class Succ(t: Term[Int]) extends Term[Int]
+case class IsZero(t: Term[Int]) extends Term[Boolean]
+case class If[T](c: Term[Boolean],
+ t1: Term[T],
+ t2: Term[T]) extends Term[T]
+
+object Test extends App {
+ def eval[T](t: Term[T]): T = t match {
+ case Lit(n) => n
+ case Succ(u) => eval(u) + 1
+ case IsZero(u) => eval(u) == 0
+ case If(c, u1, u2) => eval(if (eval(c)) u1 else u2)
+ }
+ println(eval(If(IsZero(Lit(1)), Lit(41), Succ(Lit(41)))))
+}