summaryrefslogtreecommitdiff
path: root/test/pending/jvm/t7006
diff options
context:
space:
mode:
Diffstat (limited to 'test/pending/jvm/t7006')
-rw-r--r--test/pending/jvm/t7006/Foo_1.flags1
-rw-r--r--test/pending/jvm/t7006/Foo_1.scala10
-rw-r--r--test/pending/jvm/t7006/Test.scala21
3 files changed, 32 insertions, 0 deletions
diff --git a/test/pending/jvm/t7006/Foo_1.flags b/test/pending/jvm/t7006/Foo_1.flags
new file mode 100644
index 0000000000..5d1b6b2644
--- /dev/null
+++ b/test/pending/jvm/t7006/Foo_1.flags
@@ -0,0 +1 @@
+-Yopt:l:project -Ydebug -Xfatal-warnings
diff --git a/test/pending/jvm/t7006/Foo_1.scala b/test/pending/jvm/t7006/Foo_1.scala
new file mode 100644
index 0000000000..3985557d9f
--- /dev/null
+++ b/test/pending/jvm/t7006/Foo_1.scala
@@ -0,0 +1,10 @@
+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
new file mode 100644
index 0000000000..7b4a8c45fb
--- /dev/null
+++ b/test/pending/jvm/t7006/Test.scala
@@ -0,0 +1,21 @@
+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)
+ }
+}