From fe1e6fc0d38d67f1b0e6a50fdb2126b3cb56e739 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 27 Jul 2012 19:21:27 +0400 Subject: [PATCH] KT-2541 VerifyError on substituting type after inheritance from trait #KT-2541 Fixed --- .../jetbrains/jet/codegen/ImplementationBodyCodegen.java | 2 ++ compiler/testData/codegen/regressions/kt2541.kt | 7 +++++++ compiler/tests/org/jetbrains/jet/codegen/TraitsTest.java | 4 ++++ 3 files changed, 13 insertions(+) create mode 100644 compiler/testData/codegen/regressions/kt2541.kt 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"); + } }