From 12b6598714d72bd1d275d756de0b8e7df04d1f16 Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Tue, 10 Nov 2015 15:02:55 +0100 Subject: Fix specialized function class names in closure optimizer --- .../tools/nsc/backend/jvm/opt/MethodLevelOpts.scala | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'test/junit') 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) + } } -- cgit v1.2.3