diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index d2d813cbfe7..e259def68f1 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -823,11 +823,13 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { codegen.generateThisOrOuter(descriptor); // ??? wouldn't it be a good idea to put it? Type[] argTypes = function.getArgumentTypes(); + List originalArgTypes = jvmSignature.getValueParameterTypes(); InstructionAdapter iv = new InstructionAdapter(mv); iv.load(0, JetTypeMapper.TYPE_OBJECT); for (int i = 0, reg = 1; i < argTypes.length; i++) { Type argType = argTypes[i]; iv.load(reg, argType); + StackValue.coerce(argType, originalArgTypes.get(i), iv); //noinspection AssignmentToForLoopParameter reg += argType.getSize(); } diff --git a/compiler/testData/codegen/regressions/kt2541.kt b/compiler/testData/codegen/regressions/kt2541.kt new file mode 100644 index 00000000000..c054d5fbadc --- /dev/null +++ b/compiler/testData/codegen/regressions/kt2541.kt @@ -0,0 +1,7 @@ +trait A { + fun foo(t: T, u: U) = "OK" +} + +class B : A + +fun box(): String = B().foo(1, 2) diff --git a/compiler/tests/org/jetbrains/jet/codegen/TraitsTest.java b/compiler/tests/org/jetbrains/jet/codegen/TraitsTest.java index d56ba81d8ba..4fc16527f88 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/TraitsTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/TraitsTest.java @@ -64,4 +64,8 @@ public class TraitsTest extends CodegenTestCase { public void testTraitFuncCall() { blackBoxFile("traits/traitFuncCall.kt"); } + + public void testKt2541() { + blackBoxFile("regressions/kt2541.kt"); + } }