summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2014-02-23 23:18:38 +0100
committerGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2014-02-23 23:18:38 +0100
commit5c84255b6783a0ff21999d0b7456b2d7ff5ee953 (patch)
tree5adc14578378138d8bb6880fa11dbd8b80575ae6 /test
parentefa99c01974febe227937f090afbb93b9a6a59a5 (diff)
parentc001b888b896989a2c0afa0c24d038502970151c (diff)
downloadscala-5c84255b6783a0ff21999d0b7456b2d7ff5ee953.tar.gz
scala-5c84255b6783a0ff21999d0b7456b2d7ff5ee953.tar.bz2
scala-5c84255b6783a0ff21999d0b7456b2d7ff5ee953.zip
Merge pull request #3559 from adriaanm/t1503
SI-1503 don't assume unsound type for ident/literal patterns
Diffstat (limited to 'test')
-rw-r--r--test/files/neg/t1503.check8
-rw-r--r--test/files/neg/t1503.flags1
-rw-r--r--test/files/neg/t1503.scala8
-rw-r--r--test/files/run/t1503.check1
-rw-r--r--test/files/run/t1503.scala20
-rw-r--r--test/files/run/t1503_future.flags1
-rw-r--r--test/files/run/t1503_future.scala17
7 files changed, 56 insertions, 0 deletions
diff --git a/test/files/neg/t1503.check b/test/files/neg/t1503.check
new file mode 100644
index 0000000000..7adeea20f3
--- /dev/null
+++ b/test/files/neg/t1503.check
@@ -0,0 +1,8 @@
+t1503.scala:7: warning: The value matched by Whatever is bound to n, which may be used under the
+unsound assumption that it has type Whatever.type, whereas we can only safely
+count on it having type Any, as the pattern is matched using `==` (see SI-1503).
+ def matchWhateverCCE(x: Any) = x match { case n @ Whatever => n }
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+one warning found
+one error found
diff --git a/test/files/neg/t1503.flags b/test/files/neg/t1503.flags
new file mode 100644
index 0000000000..e93641e931
--- /dev/null
+++ b/test/files/neg/t1503.flags
@@ -0,0 +1 @@
+-Xlint -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/t1503.scala b/test/files/neg/t1503.scala
new file mode 100644
index 0000000000..9877f99d0a
--- /dev/null
+++ b/test/files/neg/t1503.scala
@@ -0,0 +1,8 @@
+object Whatever {
+ override def equals(x: Any) = true
+}
+
+class Test {
+ // when left to its own devices, and not under -Xfuture, the return type is Whatever.type
+ def matchWhateverCCE(x: Any) = x match { case n @ Whatever => n }
+} \ No newline at end of file
diff --git a/test/files/run/t1503.check b/test/files/run/t1503.check
new file mode 100644
index 0000000000..43eceb0229
--- /dev/null
+++ b/test/files/run/t1503.check
@@ -0,0 +1 @@
+whoops
diff --git a/test/files/run/t1503.scala b/test/files/run/t1503.scala
new file mode 100644
index 0000000000..1be0e74ac2
--- /dev/null
+++ b/test/files/run/t1503.scala
@@ -0,0 +1,20 @@
+object Whatever {
+ override def equals(x: Any) = true
+}
+
+object Test extends App {
+ // this should make it abundantly clear Any is the best return type we can guarantee
+ def matchWhatever(x: Any): Any = x match { case n @ Whatever => n }
+ // when left to its own devices, and not under -Xfuture, the return type is Whatever.type
+ def matchWhateverCCE(x: Any) = x match { case n @ Whatever => n }
+
+ // just to exercise it a bit
+ assert(matchWhatever(1) == 1)
+ assert(matchWhatever("1") == "1")
+
+ try {
+ matchWhateverCCE("1"): Whatever.type
+ } catch {
+ case _: ClassCastException => println("whoops")
+ }
+} \ No newline at end of file
diff --git a/test/files/run/t1503_future.flags b/test/files/run/t1503_future.flags
new file mode 100644
index 0000000000..112fc720a0
--- /dev/null
+++ b/test/files/run/t1503_future.flags
@@ -0,0 +1 @@
+-Xfuture \ No newline at end of file
diff --git a/test/files/run/t1503_future.scala b/test/files/run/t1503_future.scala
new file mode 100644
index 0000000000..1e3daad761
--- /dev/null
+++ b/test/files/run/t1503_future.scala
@@ -0,0 +1,17 @@
+object Whatever {
+ override def equals(x: Any) = true
+}
+
+object Test extends App {
+ // this should make it abundantly clear Any is the best return type we can guarantee
+ def matchWhatever(x: Any): Any = x match { case n @ Whatever => n }
+ // when left to its own devices, and not under -Xfuture, the return type is Whatever.type
+ def matchWhateverCCE(x: Any) = x match { case n @ Whatever => n }
+
+ // just to exercise it a bit
+ assert(matchWhatever(1) == 1)
+ assert(matchWhatever("1") == "1")
+
+ assert(matchWhateverCCE(1) == 1)
+ assert(matchWhateverCCE("1") == "1")
+} \ No newline at end of file