diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java index d3ccbf17b41..6cb40510fa2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java @@ -570,10 +570,28 @@ public abstract class StackValue { int size = this.type.getSize(); if (size == 1) { v.swap(); - } else if (size == 2) { + } + else if (size == 2) { v.dupX2(); v.pop(); - } else { + } + else { + throw new UnsupportedOperationException("don't know how to move type " + type + " to top of stack"); + } + + coerceTo(type, v); + } + else if (depth == 2) { + int size = this.type.getSize(); + if (size == 1) { + v.dup2X1(); + v.pop2(); + } + else if (size == 2) { + v.dup2X2(); + v.pop2(); + } + else { throw new UnsupportedOperationException("don't know how to move type " + type + " to top of stack"); }