summaryrefslogtreecommitdiff
path: root/test/files
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-05-17 00:00:10 -0700
committerJason Zaugg <jzaugg@gmail.com>2013-05-17 00:00:10 -0700
commit9d5e143d29c0f43a97c62aee537de1c889e6c15f (patch)
tree139a6e658d90f7d98b959a24c59c64fe796b831f /test/files
parent13b4628aabb8e7a293a382dcab6db5848f672f94 (diff)
parent9a4361178f87d4540169422a1f9462aa2b539cb5 (diff)
downloadscala-9d5e143d29c0f43a97c62aee537de1c889e6c15f.tar.gz
scala-9d5e143d29c0f43a97c62aee537de1c889e6c15f.tar.bz2
scala-9d5e143d29c0f43a97c62aee537de1c889e6c15f.zip
Merge pull request #2374 from adriaanm/ticket-6815
SI-6815 untangle isStable and hasVolatileType
Diffstat (limited to 'test/files')
-rw-r--r--test/files/neg/t6815.check5
-rw-r--r--test/files/neg/t6815.scala17
-rw-r--r--test/files/neg/volatile_no_override.check5
-rw-r--r--test/files/neg/volatile_no_override.scala14
-rw-r--r--test/files/pos/t6815.scala17
-rw-r--r--test/files/pos/t6815_import.scala16
6 files changed, 74 insertions, 0 deletions
diff --git a/test/files/neg/t6815.check b/test/files/neg/t6815.check
new file mode 100644
index 0000000000..fae3819be1
--- /dev/null
+++ b/test/files/neg/t6815.check
@@ -0,0 +1,5 @@
+t6815.scala:15: error: stable identifier required, but Test.this.u.emptyValDef found.
+ Note that value emptyValDef is not stable because its type, Test.u.ValDef, is volatile.
+ case _: u.emptyValDef.T => // and, unlike in pos/t6185.scala, we shouldn't allow this.
+ ^
+one error found
diff --git a/test/files/neg/t6815.scala b/test/files/neg/t6815.scala
new file mode 100644
index 0000000000..ff973a7437
--- /dev/null
+++ b/test/files/neg/t6815.scala
@@ -0,0 +1,17 @@
+trait U {
+ trait ValOrDefDefApi {
+ def name: Any
+ }
+ type ValOrDefDef <: ValOrDefDefApi
+ type ValDef <: ValOrDefDef with ValDefApi { type T }
+ trait ValDefApi extends ValOrDefDefApi { this: ValDef => }
+ val emptyValDef: ValDef // the result type is volatile
+}
+
+object Test {
+ val u: U = ???
+
+ (null: Any) match {
+ case _: u.emptyValDef.T => // and, unlike in pos/t6185.scala, we shouldn't allow this.
+ }
+}
diff --git a/test/files/neg/volatile_no_override.check b/test/files/neg/volatile_no_override.check
new file mode 100644
index 0000000000..a9a60ab697
--- /dev/null
+++ b/test/files/neg/volatile_no_override.check
@@ -0,0 +1,5 @@
+volatile_no_override.scala:13: error: overriding value x in class A of type Volatile.this.D;
+ value x has a volatile type; cannot override a member with non-volatile type
+ val x: A with D = null
+ ^
+one error found
diff --git a/test/files/neg/volatile_no_override.scala b/test/files/neg/volatile_no_override.scala
new file mode 100644
index 0000000000..9fad082a90
--- /dev/null
+++ b/test/files/neg/volatile_no_override.scala
@@ -0,0 +1,14 @@
+class B
+class C(x: String) extends B
+
+abstract class A {
+ class D { type T >: C <: B }
+ val x: D
+ var y: x.T = new C("abc")
+}
+
+class Volatile extends A {
+ type A >: Null
+ // test (1.4), pt 2 in RefChecks
+ val x: A with D = null
+}
diff --git a/test/files/pos/t6815.scala b/test/files/pos/t6815.scala
new file mode 100644
index 0000000000..9244b3d353
--- /dev/null
+++ b/test/files/pos/t6815.scala
@@ -0,0 +1,17 @@
+trait U {
+ trait ValOrDefDefApi {
+ def name: Any
+ }
+ type ValOrDefDef <: ValOrDefDefApi
+ type ValDef <: ValOrDefDef with ValDefApi
+ trait ValDefApi extends ValOrDefDefApi { this: ValDef => }
+ val emptyValDef: ValDef // the result type is volatile
+}
+
+object Test {
+ val u: U = ???
+
+ u.emptyValDef match {
+ case u.emptyValDef => // but we shouldn't let that stop us from treating it as a stable identifier pattern.
+ }
+}
diff --git a/test/files/pos/t6815_import.scala b/test/files/pos/t6815_import.scala
new file mode 100644
index 0000000000..56f4358d59
--- /dev/null
+++ b/test/files/pos/t6815_import.scala
@@ -0,0 +1,16 @@
+trait U {
+ trait ValOrDefDefApi {
+ def name: Any
+ }
+ type ValOrDefDef <: ValOrDefDefApi
+ type ValDef <: ValOrDefDef with ValDefApi
+ trait ValDefApi extends ValOrDefDefApi { this: ValDef => }
+ val emptyValDef: ValDef // the result type is volatile
+}
+
+object Test {
+ val u: U = ???
+
+ // but we shouldn't let that stop us from treating it as a stable identifier for import
+ import u.emptyValDef.name
+}