From 0210d265f900941a0c17bb73f8de4c784ab27fc0 Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Mon, 9 Nov 2015 09:52:42 +0100 Subject: Rewrite test for SI-7006 --- .../nsc/backend/jvm/opt/MethodLevelOptsTest.scala | 24 ++++++++++++++++++ test/pending/jvm/t7006.check | 29 ---------------------- test/pending/jvm/t7006/Foo_1.flags | 1 - test/pending/jvm/t7006/Foo_1.scala | 10 -------- test/pending/jvm/t7006/Test.scala | 21 ---------------- 5 files changed, 24 insertions(+), 61 deletions(-) delete mode 100644 test/pending/jvm/t7006.check delete mode 100644 test/pending/jvm/t7006/Foo_1.flags delete mode 100644 test/pending/jvm/t7006/Foo_1.scala delete mode 100644 test/pending/jvm/t7006/Test.scala diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOptsTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOptsTest.scala index 7e5dd734fd..423ff85f04 100644 --- a/test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOptsTest.scala +++ b/test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOptsTest.scala @@ -717,4 +717,28 @@ class MethodLevelOptsTest extends ClearAfterClass { assertEquals(locals(c, "t4"), List(("this", 0), ("x", 1))) assertEquals(locals(c, "t5"), List(("this", 0), ("x", 1))) } + + @Test + def t7006(): Unit = { + val code = + """class C { + | def t: Unit = { + | try { + | val x = 3 + | } finally { + | print("hello") + | } + | while(true) { } + | } + |} + """.stripMargin + val List(c) = compileClasses(methodOptCompiler)(code) + val t = getSingleMethod(c, "t") + assertEquals(t.handlers, Nil) + assertEquals(locals(c, "t"), List(("this", 0))) + assertEquals(t.instructions.summary, + List( + GETSTATIC, LDC, "print", + -1, GOTO)) + } } diff --git a/test/pending/jvm/t7006.check b/test/pending/jvm/t7006.check deleted file mode 100644 index 6294b14d62..0000000000 --- a/test/pending/jvm/t7006.check +++ /dev/null @@ -1,29 +0,0 @@ -[running phase parser on Foo_1.scala] -[running phase namer on Foo_1.scala] -[running phase packageobjects on Foo_1.scala] -[running phase typer on Foo_1.scala] -[running phase patmat on Foo_1.scala] -[running phase superaccessors on Foo_1.scala] -[running phase extmethods on Foo_1.scala] -[running phase pickler on Foo_1.scala] -[running phase refchecks on Foo_1.scala] -[running phase uncurry on Foo_1.scala] -[running phase tailcalls on Foo_1.scala] -[running phase specialize on Foo_1.scala] -[running phase explicitouter on Foo_1.scala] -[running phase erasure on Foo_1.scala] -[running phase posterasure on Foo_1.scala] -[running phase lazyvals on Foo_1.scala] -[running phase lambdalift on Foo_1.scala] -[running phase constructors on Foo_1.scala] -[running phase flatten on Foo_1.scala] -[running phase mixin on Foo_1.scala] -[running phase cleanup on Foo_1.scala] -[running phase delambdafy on Foo_1.scala] -[running phase icode on Foo_1.scala] -[running phase inliner on Foo_1.scala] -[running phase inlinehandlers on Foo_1.scala] -[running phase closelim on Foo_1.scala] -[running phase constopt on Foo_1.scala] -[running phase dce on Foo_1.scala] -[running phase jvm on icode] diff --git a/test/pending/jvm/t7006/Foo_1.flags b/test/pending/jvm/t7006/Foo_1.flags deleted file mode 100644 index 5d1b6b2644..0000000000 --- a/test/pending/jvm/t7006/Foo_1.flags +++ /dev/null @@ -1 +0,0 @@ --Yopt:l:project -Ydebug -Xfatal-warnings diff --git a/test/pending/jvm/t7006/Foo_1.scala b/test/pending/jvm/t7006/Foo_1.scala deleted file mode 100644 index 3985557d9f..0000000000 --- a/test/pending/jvm/t7006/Foo_1.scala +++ /dev/null @@ -1,10 +0,0 @@ -class Foo_1 { - def foo { - try { - val x = 3 // this will be optimized away, leaving a useless jump only block - } finally { - print("hello") - } - while(true){} // ensure infinite loop doesn't break the algorithm - } -} diff --git a/test/pending/jvm/t7006/Test.scala b/test/pending/jvm/t7006/Test.scala deleted file mode 100644 index 7b4a8c45fb..0000000000 --- a/test/pending/jvm/t7006/Test.scala +++ /dev/null @@ -1,21 +0,0 @@ -import scala.tools.partest.BytecodeTest -import scala.tools.asm -import asm.tree.InsnList -import scala.collection.JavaConverters._ - -object Test extends BytecodeTest { - def show: Unit = { - val classNode = loadClassNode("Foo_1") - val methodNode = getMethod(classNode, "foo") - val nopCount = count(methodNode.instructions, asm.Opcodes.NOP) - val gotoCount = count(methodNode.instructions, asm.Opcodes.GOTO) - assert(nopCount == 0, s"NOPs expected: 0, actual: $nopCount") - assert(gotoCount == 1, s"GOTOs expected: 1, actual: $gotoCount") - } - - def count(insnList: InsnList, opcode: Int): Int = { - def isNop(node: asm.tree.AbstractInsnNode): Boolean = - (node.getOpcode == opcode) - insnList.iterator.asScala.count(isNop) - } -} -- cgit v1.2.3