summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2014-06-11 09:25:50 +0200
committerJason Zaugg <jzaugg@gmail.com>2014-06-11 09:25:50 +0200
commitb664a488acca9d89c600f5b87ba9a9ca77aace59 (patch)
treea912905d3d00c7488ab11524918c715742e77765 /test
parenta7046785e98db823a25eaaa975e571baed89690a (diff)
parent78caf290f86b965cc0d750d55a62ebea567d613d (diff)
downloadscala-b664a488acca9d89c600f5b87ba9a9ca77aace59.tar.gz
scala-b664a488acca9d89c600f5b87ba9a9ca77aace59.tar.bz2
scala-b664a488acca9d89c600f5b87ba9a9ca77aace59.zip
Merge pull request #3797 from retronym/topic/exhaust-compound
SI-8631 Treat `A with Sealed` as enumerable for pattern matching
Diffstat (limited to 'test')
-rw-r--r--test/files/neg/virtpatmat_exhaust_compound.check15
-rw-r--r--test/files/neg/virtpatmat_exhaust_compound.flags1
-rw-r--r--test/files/neg/virtpatmat_exhaust_compound.scala29
3 files changed, 45 insertions, 0 deletions
diff --git a/test/files/neg/virtpatmat_exhaust_compound.check b/test/files/neg/virtpatmat_exhaust_compound.check
new file mode 100644
index 0000000000..72e0340682
--- /dev/null
+++ b/test/files/neg/virtpatmat_exhaust_compound.check
@@ -0,0 +1,15 @@
+virtpatmat_exhaust_compound.scala:14: warning: match may not be exhaustive.
+It would fail on the following inputs: O1, O2, O4
+ a match {
+ ^
+virtpatmat_exhaust_compound.scala:18: warning: match may not be exhaustive.
+It would fail on the following input: O4
+ def t1(a: Product with Base with Base2) = a match {
+ ^
+virtpatmat_exhaust_compound.scala:22: warning: match may not be exhaustive.
+It would fail on the following input: O2
+ def t2(a: Product with Base { def foo: Int }) = a match {
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+three warnings found
+one error found
diff --git a/test/files/neg/virtpatmat_exhaust_compound.flags b/test/files/neg/virtpatmat_exhaust_compound.flags
new file mode 100644
index 0000000000..85d8eb2ba2
--- /dev/null
+++ b/test/files/neg/virtpatmat_exhaust_compound.flags
@@ -0,0 +1 @@
+-Xfatal-warnings
diff --git a/test/files/neg/virtpatmat_exhaust_compound.scala b/test/files/neg/virtpatmat_exhaust_compound.scala
new file mode 100644
index 0000000000..386c7af98d
--- /dev/null
+++ b/test/files/neg/virtpatmat_exhaust_compound.scala
@@ -0,0 +1,29 @@
+sealed trait Base
+case object O1 extends Base
+case object O2 extends Base {
+ def foo: Int = 0
+}
+
+sealed trait Base2
+case object O3 extends Base2
+
+case object O4 extends Base with Base2
+
+object Test {
+ val a /*: Product with Serialiable with Base */ = if (true) O1 else O2
+ a match {
+ case null =>
+ }
+
+ def t1(a: Product with Base with Base2) = a match {
+ case null => // O1..O3 should *not* be possible here
+ }
+
+ def t2(a: Product with Base { def foo: Int }) = a match {
+ case null => // O2 in the domain
+ }
+
+ def t3(a: Product with Base { def bar: Int }) = a match {
+ case null => // nothing in the domain
+ }
+}