diff options
author | Lukas Rytz <lukas.rytz@gmail.com> | 2016-02-15 21:58:22 +0100 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@gmail.com> | 2016-02-15 21:58:44 +0100 |
commit | ce3a8030fa59e5a9082528bf6f1ffc12a9277bc9 (patch) | |
tree | 28377cedd89b31d03c7d6132b5d8ec14580b4718 /test/junit | |
parent | c524f18ee4959f6fe8297971fc882e63468c4317 (diff) | |
download | scala-ce3a8030fa59e5a9082528bf6f1ffc12a9277bc9.tar.gz scala-ce3a8030fa59e5a9082528bf6f1ffc12a9277bc9.tar.bz2 scala-ce3a8030fa59e5a9082528bf6f1ffc12a9277bc9.zip |
Rewrite a few more tests to the new optimizer
Diffstat (limited to 'test/junit')
-rw-r--r-- | test/junit/scala/issues/OptimizedBytecodeTest.scala | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/test/junit/scala/issues/OptimizedBytecodeTest.scala b/test/junit/scala/issues/OptimizedBytecodeTest.scala index 3c6f1ff25e..58ab6c2134 100644 --- a/test/junit/scala/issues/OptimizedBytecodeTest.scala +++ b/test/junit/scala/issues/OptimizedBytecodeTest.scala @@ -328,4 +328,56 @@ class OptimizedBytecodeTest extends ClearAfterClass { assertInvoke(getSingleMethod(c, "f2a"), "C", "C$$$anonfun$3") assertInvoke(getSingleMethod(c, "f2b"), "C", "wrapper2") } + + @Test + def t7060(): Unit = { + val code = + """class C { + | @inline final def mbarray_apply_minibox(array: Any, tag: Byte): Long = + | if (tag == 0) array.asInstanceOf[Array[Long]](0) + | else array.asInstanceOf[Array[Byte]](0).toLong + | + | def t = mbarray_apply_minibox(null, 0) + |} + """.stripMargin + val List(c) = compileClasses(compiler)(code) + assertNoInvoke(getSingleMethod(c, "t")) + } + + @Test + def t8315(): Unit = { + val code = + """class C { + | def t(as: Listt): Unit = { + | map(as, (_: Any) => return) + | } + | final def map(x: Listt, f: Any => Any): Any = { + | if (x eq Nill) "" else f("") + | } + |} + |object Nill extends Listt + |class Listt + """.stripMargin + val List(c, nil, nilMod, listt) = compileClasses(compiler)(code) + assertInvoke(getSingleMethod(c, "t"), "C", "C$$$anonfun$1") + } + + @Test + def t8315b(): Unit = { + val code = + """class C { + | def crash: Unit = { + | val key = "" + | try map(new F(key)) + | catch { case _: Throwable => } + | } + | final def map(f: F): Any = f.apply("") + |} + |final class F(key: String) { + | final def apply(a: Any): Any = throw new RuntimeException(key) + |} + """.stripMargin + val List(c, f) = compileClasses(compiler)(code) + assertInvoke(getSingleMethod(c, "crash"), "C", "map") + } } |