From 9daa44566bd1eaa6564b45f3f769000203b6c0aa Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Tue, 3 Nov 2015 12:30:24 +0300 Subject: [PATCH] Fix for KT-5589: VerifyError when default value for parameter of local function is obtained from closure #KT-5589 Fixed --- .../src/org/jetbrains/kotlin/codegen/ClosureCodegen.java | 8 ++++---- compiler/testData/codegen/box/closures/kt5589.kt | 5 +++++ .../codegen/generated/BlackBoxCodegenTestGenerated.java | 6 ++++++ 3 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 compiler/testData/codegen/box/closures/kt5589.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java index 22291f863ac..ec0f0af4d3e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java @@ -205,6 +205,10 @@ public class ClosureCodegen extends MemberCodegen { generateFunctionReferenceMethods(functionReferenceTarget); } + functionCodegen.generateDefaultIfNeeded( + context.intoFunction(funDescriptor), funDescriptor, context.getContextKind(), DefaultParameterValueLoader.DEFAULT, null + ); + this.constructor = generateConstructor(); if (isConst(closure)) { @@ -212,10 +216,6 @@ public class ClosureCodegen extends MemberCodegen { } genClosureFields(closure, v, typeMapper); - - functionCodegen.generateDefaultIfNeeded( - context.intoFunction(funDescriptor), funDescriptor, context.getContextKind(), DefaultParameterValueLoader.DEFAULT, null - ); } @Override diff --git a/compiler/testData/codegen/box/closures/kt5589.kt b/compiler/testData/codegen/box/closures/kt5589.kt new file mode 100644 index 00000000000..3b3a27d91ca --- /dev/null +++ b/compiler/testData/codegen/box/closures/kt5589.kt @@ -0,0 +1,5 @@ +fun box(): String { + val x = "OK" + fun bar(y: String = x): String = y + return bar() +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java index c414ace497d..09252ce51f0 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -1846,6 +1846,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("kt5589.kt") + public void testKt5589() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/closures/kt5589.kt"); + doTest(fileName); + } + @TestMetadata("localClassFunClosure.kt") public void testLocalClassFunClosure() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/closures/localClassFunClosure.kt");