summaryrefslogtreecommitdiff
path: root/test/pending/script/t2365
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-08-24 17:11:55 +0000
committerPaul Phillips <paulp@improving.org>2011-08-24 17:11:55 +0000
commitb9785280a7138a2bb52060faf94807aa0d07dec1 (patch)
tree870cc1930ac3d50cd07078260f58984224dd39a5 /test/pending/script/t2365
parent84fcf633d9ca507124806d64729cb8463bcebb69 (diff)
downloadscala-b9785280a7138a2bb52060faf94807aa0d07dec1.tar.gz
scala-b9785280a7138a2bb52060faf94807aa0d07dec1.tar.bz2
scala-b9785280a7138a2bb52060faf94807aa0d07dec1.zip
Renamed tests named bugXXX to tXXX, no review.
Diffstat (limited to 'test/pending/script/t2365')
-rw-r--r--test/pending/script/t2365/Test.scala35
-rwxr-xr-xtest/pending/script/t2365/runner.scala9
2 files changed, 44 insertions, 0 deletions
diff --git a/test/pending/script/t2365/Test.scala b/test/pending/script/t2365/Test.scala
new file mode 100644
index 0000000000..53581d256b
--- /dev/null
+++ b/test/pending/script/t2365/Test.scala
@@ -0,0 +1,35 @@
+import scala.tools.nsc.io._
+import java.net.URL
+
+object A { def apply(d: { def apply(): Int}) = d.apply() }
+object A2 { def apply(d: { def apply(): Int}) = d.apply() }
+object A3 { def apply(d: { def apply(): Int}) = d.apply() }
+object A4 { def apply(d: { def apply(): Int}) = d.apply() }
+
+class B extends Function0[Int] {
+ def apply() = 3
+}
+
+object Test
+{
+ type StructF0 = { def apply(): Int }
+ def main(args: Array[String]) {
+ for(i <- 0 until 150)
+ println(i + " " + test(A.apply) + " " + test(A2.apply) + " " + test(A3.apply) + " " + test(A3.apply))
+ }
+
+ def test(withF0: StructF0 => Int): Int = {
+ // Some large jar
+ val jar = File("../../../../lib/scalacheck.jar").toURL
+ // load a class in a separate loader that will be passed to A
+ val loader = new java.net.URLClassLoader(Array(File(".").toURL, jar))
+ // load a real class to fill perm gen space
+ Class.forName("org.scalacheck.Properties", true, loader).newInstance
+ // create a class from another class loader with an apply: Int method
+ val b = Class.forName("B", true, loader).newInstance
+
+ // pass instance to a, which will call apply using structural type reflection.
+ // This should hold on to the class for B, which means bLoader will not get collected
+ withF0(b.asInstanceOf[StructF0])
+ }
+}
diff --git a/test/pending/script/t2365/runner.scala b/test/pending/script/t2365/runner.scala
new file mode 100755
index 0000000000..b5e05325cf
--- /dev/null
+++ b/test/pending/script/t2365/runner.scala
@@ -0,0 +1,9 @@
+#!/bin/sh
+#
+# This script should fail with any build of scala where #2365
+# is not fixed, and otherwise succeed. Failure means running out
+# of PermGen space.
+#
+
+scalac -cp .:/local/lib/java/ivy.jar Test.scala
+JAVA_OPTS="-XX:MaxPermSize=25M -verbose:gc" scalac -cp $CP Test