From b9785280a7138a2bb52060faf94807aa0d07dec1 Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Wed, 24 Aug 2011 17:11:55 +0000 Subject: Renamed tests named bugXXX to tXXX, no review. --- test/pending/script/t2365/Test.scala | 35 ++++++++++++++++++++++++++++++++++ test/pending/script/t2365/runner.scala | 9 +++++++++ 2 files changed, 44 insertions(+) create mode 100644 test/pending/script/t2365/Test.scala create mode 100755 test/pending/script/t2365/runner.scala (limited to 'test/pending/script/t2365') 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 -- cgit v1.2.3