diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-12-11 17:05:41 -0800 |
---|---|---|
committer | Adriaan Moors <adriaan@feather.local> | 2013-12-12 10:30:56 -0800 |
commit | 3fa2c97853de2110227f50982187b4377b8772bc (patch) | |
tree | 92cd1426843ef3274b46076dc46164e62d012fec /test/files/run | |
parent | 2aa9da578e03987427a2d932becc75fc0f016d8b (diff) | |
download | scala-3fa2c97853de2110227f50982187b4377b8772bc.tar.gz scala-3fa2c97853de2110227f50982187b4377b8772bc.tar.bz2 scala-3fa2c97853de2110227f50982187b4377b8772bc.zip |
Report error on code size overflow, log method name.
We used to silently skip class files that would exceed the JVM's size limits.
While rare, this should still be an error.
While I was at it, also included the name of the offending method.
Diffstat (limited to 'test/files/run')
-rw-r--r-- | test/files/run/large_code.check | 3 | ||||
-rw-r--r-- | test/files/run/large_code.scala | 24 |
2 files changed, 27 insertions, 0 deletions
diff --git a/test/files/run/large_code.check b/test/files/run/large_code.check new file mode 100644 index 0000000000..6ad50967bc --- /dev/null +++ b/test/files/run/large_code.check @@ -0,0 +1,3 @@ +newSource1.scala:1: error: Could not write class BigEnoughToFail because it exceeds JVM code size limits. Method tooLong's code too large! +class BigEnoughToFail { + ^ diff --git a/test/files/run/large_code.scala b/test/files/run/large_code.scala new file mode 100644 index 0000000000..f9d7f8c95b --- /dev/null +++ b/test/files/run/large_code.scala @@ -0,0 +1,24 @@ +import scala.tools.partest._ +import java.io.{Console => _, _} + +// a cold run of partest takes about 15s for this test on my laptop +object Test extends DirectTest { + override def extraSettings: String = "-usejavacp -d " + testOutput.path + + // test that we hit the code size limit and error out gracefully + // 5958 is the magic number (2^16/11 -- each `a(1,2,3,4,5,6)` is 11 bytes of bytecode) + override def code + = s""" + |class BigEnoughToFail { + | def a(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int): Unit = {} + | def tooLong: Unit = { + | ${(1 to 5958) map (_ => "a(1,2,3,4,5,6)") mkString(";")} + | } + |}""".stripMargin.trim + + override def show(): Unit = { + Console.withErr(System.out) { + compile() + } + } +} |