summaryrefslogtreecommitdiff
path: root/test/files/run/nonlocalreturn.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-05-03 23:41:10 -0700
committerPaul Phillips <paulp@improving.org>2012-05-04 01:22:23 -0700
commitaad6deae7204a7fc95b59ede61b188bb62f51188 (patch)
tree4c034353840a59ee001c8e330c23126a0c50fb13 /test/files/run/nonlocalreturn.scala
parentf146d5826fc335ee1ca9c285d69086a7475cb71e (diff)
downloadscala-aad6deae7204a7fc95b59ede61b188bb62f51188.tar.gz
scala-aad6deae7204a7fc95b59ede61b188bb62f51188.tar.bz2
scala-aad6deae7204a7fc95b59ede61b188bb62f51188.zip
Fix for broken non-local returns.
Don't change the owner of a return if the new owner is nested inside the old owner. Closes SI-5612.
Diffstat (limited to 'test/files/run/nonlocalreturn.scala')
-rw-r--r--test/files/run/nonlocalreturn.scala15
1 files changed, 15 insertions, 0 deletions
diff --git a/test/files/run/nonlocalreturn.scala b/test/files/run/nonlocalreturn.scala
new file mode 100644
index 0000000000..3c1e7420ed
--- /dev/null
+++ b/test/files/run/nonlocalreturn.scala
@@ -0,0 +1,15 @@
+object Test {
+ def wrap[K](body: => K): K = body
+
+ def f(): Option[Int] = {
+ wrap({ return Some(1) ; None })
+ }
+
+ def main(args: Array[String]) {
+ println(f())
+ }
+}
+// java.lang.ClassCastException: scala.Some cannot be cast to scala.None$
+// at Test$$anonfun$f$1.apply(nonlocalreturn.scala:5)
+// at Test$$anonfun$f$1.apply(nonlocalreturn.scala:5)
+// at Test$.wrap(nonlocalreturn.scala:2)