Skip to content

Commit ed03afc

Browse files
authored
Merge pull request #5757 from dotty-staging/fix-#3271
Fix #3271: Add regression test
2 parents 2ce89da + 3173514 commit ed03afc

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

compiler/test/dotty/tools/backend/jvm/DottyBytecodeTests.scala

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -649,4 +649,50 @@ class TestBCode extends DottyBytecodeTest {
649649
assertFalse(boxUnit)
650650
}
651651
}
652+
653+
@Test def i3271 = {
654+
val source =
655+
"""class Test {
656+
| def test = {
657+
| var x = 0
658+
| while(x <= 5) {
659+
| println(x)
660+
| x += 1
661+
| }
662+
| }
663+
|}
664+
""".stripMargin
665+
666+
checkBCode(source) { dir =>
667+
val clsIn = dir.lookupName("Test.class", directory = false).input
668+
val clsNode = loadClassNode(clsIn)
669+
val method = getMethod(clsNode, "test")
670+
671+
val instructions = instructionsFromMethod(method)
672+
673+
val expected = List(
674+
Op(Opcodes.ICONST_0),
675+
VarOp(Opcodes.ISTORE, 1),
676+
Label(2),
677+
FrameEntry(1, List(1), List()),
678+
VarOp(Opcodes.ILOAD, 1),
679+
Op(Opcodes.ICONST_5),
680+
Jump(Opcodes.IF_ICMPGT, Label(16)),
681+
Field(Opcodes.GETSTATIC, "scala/Predef$", "MODULE$", "Lscala/Predef$;"),
682+
VarOp(Opcodes.ILOAD, 1),
683+
Invoke(Opcodes.INVOKESTATIC, "scala/runtime/BoxesRunTime", "boxToInteger", "(I)Ljava/lang/Integer;", false),
684+
Invoke(Opcodes.INVOKEVIRTUAL, "scala/Predef$", "println", "(Ljava/lang/Object;)V", false),
685+
VarOp(Opcodes.ILOAD, 1),
686+
Op(Opcodes.ICONST_1),
687+
Op(Opcodes.IADD),
688+
VarOp(Opcodes.ISTORE, 1),
689+
Jump(Opcodes.GOTO, Label(2)),
690+
Label(16),
691+
FrameEntry(3, List(), List()),
692+
Op(Opcodes.RETURN))
693+
694+
assert(instructions == expected,
695+
"`test` was not properly generated\n" + diffInstructions(instructions, expected))
696+
}
697+
}
652698
}

0 commit comments

Comments
 (0)