diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java index d2d487da7b1..8f2ee0afe8c 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java @@ -687,7 +687,7 @@ public class FunctionCodegen extends GenerationStateAware { iv.invokeinterface(internalName, jvmSignatureName, jvmSignatureDescriptor); } else { - if (!constructor) { + if (!constructor && functionDescriptor.getVisibility() != Visibilities.PRIVATE) { iv.invokevirtual(internalName, jvmSignatureName, jvmSignatureDescriptor); } else { diff --git a/compiler/testData/codegen/functions/privateDefaultArgs.kt b/compiler/testData/codegen/functions/privateDefaultArgs.kt new file mode 100644 index 00000000000..261a0add314 --- /dev/null +++ b/compiler/testData/codegen/functions/privateDefaultArgs.kt @@ -0,0 +1,13 @@ +// Check that this code doesn't contains INVOKEVIRTUAL instruction +class B { + private fun foo(i: Int = 1) { + } + + fun f() { + foo(2) + } +} + +fun box(): String { + return "OK" +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java index cac49438062..3fc36bc3f3b 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java @@ -195,4 +195,11 @@ public class FunctionGenTest extends CodegenTestCase { public void testKt2929() { blackBoxFile("regressions/kt2929.kt"); } + + public void testPrivateDefaultArgs() throws Exception { + loadFile("functions/privateDefaultArgs.kt"); + String text = generateToText(); + assertFalse(text.contains("INVOKEVIRTUAL")); + assertTrue(text.contains("INVOKESPECIAL")); + } }