summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2015-03-30 14:30:30 +0200
committerLukas Rytz <lukas.rytz@gmail.com>2015-04-01 08:35:32 +0200
commit09f5752b871a2e870dfc1bb57fda203515d26651 (patch)
tree26d30d990c50b11427bcdcfb4e835c2763b74c9e
parent638ed9108f10bcbebb69f2fefe05c7423c8bdfd7 (diff)
downloadscala-09f5752b871a2e870dfc1bb57fda203515d26651.tar.gz
scala-09f5752b871a2e870dfc1bb57fda203515d26651.tar.bz2
scala-09f5752b871a2e870dfc1bb57fda203515d26651.zip
Apply local variable index shift when inlining iinc instruction
That was an oversight. Scalac never emits iinc, but it can appear when inlining from the classpath.
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala b/src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala
index c827a097ea..1a51063231 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala
@@ -332,6 +332,7 @@ class Inliner[BT <: BTypes](val btypes: BT) {
val localVarShift = callsiteMethod.maxLocals
clonedInstructions.iterator.asScala foreach {
case varInstruction: VarInsnNode => varInstruction.`var` += localVarShift
+ case iinc: IincInsnNode => iinc.`var` += localVarShift
case _ => ()
}