summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2013-12-11 17:05:41 -0800
committerAdriaan Moors <adriaan@feather.local>2013-12-12 10:30:56 -0800
commit3fa2c97853de2110227f50982187b4377b8772bc (patch)
tree92cd1426843ef3274b46076dc46164e62d012fec /test
parent2aa9da578e03987427a2d932becc75fc0f016d8b (diff)
downloadscala-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')
-rw-r--r--test/files/run/large_code.check3
-rw-r--r--test/files/run/large_code.scala24
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()
+ }
+ }
+}