diff options
author | Lukas Rytz <lukas.rytz@gmail.com> | 2015-11-10 15:02:55 +0100 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@gmail.com> | 2015-11-10 15:02:55 +0100 |
commit | 12b6598714d72bd1d275d756de0b8e7df04d1f16 (patch) | |
tree | b947a8416e61ac3b724784a4b1927ed25474a0e6 /test | |
parent | 9fa3783a11079ce48afc42d8da633c0b8c9f7526 (diff) | |
download | scala-12b6598714d72bd1d275d756de0b8e7df04d1f16.tar.gz scala-12b6598714d72bd1d275d756de0b8e7df04d1f16.tar.bz2 scala-12b6598714d72bd1d275d756de0b8e7df04d1f16.zip |
Fix specialized function class names in closure optimizer
Diffstat (limited to 'test')
-rw-r--r-- | test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOpts.scala | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOpts.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOpts.scala index 734b5d9172..3228d3de65 100644 --- a/test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOpts.scala +++ b/test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOpts.scala @@ -235,4 +235,21 @@ class MethodLevelOpts extends ClearAfterClass { VarOp(ILOAD, 3), Invoke(INVOKESTATIC, "C", "C$$$anonfun$1", "(III)I", false), Op(IRETURN))) } + + @Test + def rewriteSpecializedClosureCall(): Unit = { + val code = + """class C { + | def t = { + | val f1 = (x: Int) => println(x) // int-unit specialization + | val f2 = (x: Int, y: Long) => x == y // int-long-boolean + | f1(1) + | f2(3, 4) + | } + |} + """.stripMargin + val List(c) = compileClasses(methodOptCompiler)(code) + val t = getSingleMethod(c, "t") + assert(!t.instructions.exists(_.opcode == INVOKEDYNAMIC), t) + } } |