diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java index e797dadb554..b29522718c2 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java @@ -531,8 +531,17 @@ public abstract class StackValue { if (setter == null) { throw new UnsupportedOperationException("no setter specified"); } - if(setter instanceof CallableMethod) - ((CallableMethod)setter).invoke(v); + if(setter instanceof CallableMethod) { + CallableMethod method = (CallableMethod) setter; + method.invoke(v); + Type returnType = method.getSignature().getAsmMethod().getReturnType(); + if(returnType != Type.VOID_TYPE) { + if(returnType.getSize() == 2) + v.pop2(); + else + v.pop(); + } + } else ((IntrinsicMethod)setter).generate(codegen, v, null, null, null, null); } diff --git a/compiler/testData/codegen/regressions/kt950.jet b/compiler/testData/codegen/regressions/kt950.jet new file mode 100644 index 00000000000..40e572f79b2 --- /dev/null +++ b/compiler/testData/codegen/regressions/kt950.jet @@ -0,0 +1,9 @@ +import java.util.* + +fun Map.set(k : K, v : V) = put(k, v) + +fun box() : String { + val map = HashMap() + map["239"] = "932" + return if(map["239"] == "932") "OK" else "fail" +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/ArrayGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/ArrayGenTest.java index f14c34e279d..69f20e56346 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/ArrayGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/ArrayGenTest.java @@ -286,6 +286,10 @@ public class ArrayGenTest extends CodegenTestCase { // System.out.println(generateToText()); } + public void testKt950() { + blackBoxFile("regressions/kt950.jet"); + } + public void testKt594() throws Exception { loadFile("regressions/kt594.jet"); // System.out.println(generateToText());