From 03fb49bb38a0d2417b3f453a23fae21926614de4 Mon Sep 17 00:00:00 2001 From: Mads Ager Date: Fri, 31 Jan 2020 15:29:19 +0100 Subject: [PATCH] [JVM_IR] Improve debugging behavior of inline functions Specifically, this commit improves the stepping behavior of the IR backend around functions with defaults. - Improved line numbers in the default handler itself for better stepping when inlined. - Improved source information on default arguments - Improved test coverage of stepping behavior in old and IR backends. Improves the stepping behaviour around inline methods with default arguments. In particular, we now accurately step through the evaluation of default arguments, but do _not_ spuriously show the exit from the $default handler. --- .../kotlin/codegen/inline/InlineCodegen.kt | 12 ++--- .../kotlin/codegen/inline/PsiInlineCodegen.kt | 2 +- ...irOldFrontendDiagnosticsTestGenerated.java | 5 -- .../backend/jvm/codegen/IrInlineCodegen.kt | 8 +++- .../jvm/lower/FunctionReferenceLowering.kt | 2 +- .../lambdaInlining/genericLambda.kt | 3 ++ .../lambdaInlining/simpleGeneric.kt | 3 ++ .../codegen/boxInline/smap/assertion.kt | 2 +- .../codegen/boxInline/smap/defaultFunction.kt | 2 +- .../defaultLambda/defaultLambdaInAnonymous.kt | 2 +- .../smap/defaultLambda/inlinInDefault.kt | 2 +- .../defaultLambda/inlineAnonymousInDefault.kt | 2 +- .../inlineAnonymousInDefault2.kt | 2 +- .../boxInline/smap/defaultLambda/kt21827.kt | 2 +- .../boxInline/smap/defaultLambda/nested.kt | 2 +- .../boxInline/smap/defaultLambda/simple.kt | 2 +- .../boxInline/smap/defaultLambda/simple2.kt | 2 +- compiler/testData/debug/stepping/assertion.kt | 46 +++++++++++++++++++ .../debug/stepping/simpleDefaultArg.kt | 16 +++++++ .../stepping/simpleDefaultArgWithInline.kt | 15 ++++++ .../debug/stepping/simpleInlineDefaultArg.kt | 18 ++++++++ .../specialNames/defaults.fir.kt | 6 --- ...faultFunction.kt => defaultFunction_ir.kt} | 1 + ...ultFunction.txt => defaultFunction_ir.txt} | 0 .../defaultFunction_old.kt | 10 ++++ .../defaultFunction_old.txt | 18 ++++++++ .../specialNames/defaults_ir.kt} | 1 + .../specialNames/defaults_ir.txt} | 0 .../{defaults.kt => defaults_old.kt} | 1 + .../{defaults.txt => defaults_old.txt} | 0 .../checkers/DiagnosticsTestGenerated.java | 5 -- ...gnosticsTestWithJvmIrBackendGenerated.java | 12 ++--- ...nosticsTestWithOldJvmBackendGenerated.java | 12 ++--- .../DiagnosticsUsingJavacTestGenerated.java | 5 -- .../IrSteppingTestGenerated.java | 24 ++++++++++ .../SteppingTestGenerated.java | 24 ++++++++++ 36 files changed, 216 insertions(+), 53 deletions(-) create mode 100644 compiler/testData/debug/stepping/assertion.kt create mode 100644 compiler/testData/debug/stepping/simpleDefaultArg.kt create mode 100644 compiler/testData/debug/stepping/simpleDefaultArgWithInline.kt create mode 100644 compiler/testData/debug/stepping/simpleInlineDefaultArg.kt delete mode 100644 compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/defaults.fir.kt rename compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/{defaultFunction.kt => defaultFunction_ir.kt} (88%) rename compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/{defaultFunction.txt => defaultFunction_ir.txt} (100%) create mode 100644 compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction_old.kt create mode 100644 compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction_old.txt rename compiler/testData/diagnostics/{tests/duplicateJvmSignature/specialNames/defaults.kt => testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults_ir.kt} (88%) rename compiler/testData/diagnostics/{tests/duplicateJvmSignature/specialNames/defaults.txt => testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults_ir.txt} (100%) rename compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/{defaults.kt => defaults_old.kt} (87%) rename compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/{defaults.txt => defaults_old.txt} (100%) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt index a68057b3eb1..b9779f1c20b 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.codegen.inline import com.intellij.psi.PsiElement import com.intellij.util.ArrayUtil import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.builtins.isSuspendFunctionTypeOrSubtype import org.jetbrains.kotlin.codegen.* import org.jetbrains.kotlin.codegen.AsmUtil.isPrimitive import org.jetbrains.kotlin.codegen.context.ClosureContext @@ -133,14 +132,15 @@ abstract class InlineCodegen( inlineDefaultLambdas: Boolean, mapDefaultSignature: Boolean, typeSystem: TypeSystemCommonBackendContext, - registerLineNumberAfterwards: Boolean + registerLineNumberAfterwards: Boolean, + isCallOfFunctionInCorrespondingDefaultDispatch: Boolean ) { var nodeAndSmap: SMAPAndMethodNode? = null try { nodeAndSmap = createInlineMethodNode( functionDescriptor, methodOwner, jvmSignature, mapDefaultSignature, typeArguments, typeSystem, state, sourceCompiler ) - endCall(inlineCall(nodeAndSmap, inlineDefaultLambdas), registerLineNumberAfterwards) + endCall(inlineCall(nodeAndSmap, inlineDefaultLambdas, isCallOfFunctionInCorrespondingDefaultDispatch), registerLineNumberAfterwards) } catch (e: CompilationException) { throw e } catch (e: InlineException) { @@ -206,9 +206,9 @@ abstract class InlineCodegen( ?: error("No stack value for continuation parameter of suspend function") } - protected fun inlineCall(nodeAndSmap: SMAPAndMethodNode, inlineDefaultLambda: Boolean): InlineResult { + protected fun inlineCall(nodeAndSmap: SMAPAndMethodNode, inlineDefaultLambda: Boolean, isCallOfFunctionInCorrespondingDefaultDispatch: Boolean): InlineResult { assert(delayedHiddenWriting == null) { "'putHiddenParamsIntoLocals' should be called after 'processAndPutHiddenParameters(true)'" } - defaultSourceMapper.callSiteMarker = CallSiteMarker(codegen.lastLineNumber) + if (!isCallOfFunctionInCorrespondingDefaultDispatch) defaultSourceMapper.callSiteMarker = CallSiteMarker(codegen.lastLineNumber) val node = nodeAndSmap.node if (inlineDefaultLambda) { for (lambda in extractDefaultLambdas(node)) { @@ -270,7 +270,7 @@ abstract class InlineCodegen( addInlineMarker(codegen.v, false) } - defaultSourceMapper.callSiteMarker = null + if (!isCallOfFunctionInCorrespondingDefaultDispatch) defaultSourceMapper.callSiteMarker = null return result } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/PsiInlineCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/PsiInlineCodegen.kt index 87babfa3607..85ff9f013bf 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/PsiInlineCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/PsiInlineCodegen.kt @@ -69,7 +69,7 @@ class PsiInlineCodegen( } try { val registerLineNumber = registerLineNumberAfterwards(resolvedCall) - performInline(resolvedCall?.typeArguments?.keys?.toList(), callDefault, callDefault, codegen.typeSystem, registerLineNumber) + performInline(resolvedCall?.typeArguments?.keys?.toList(), callDefault, callDefault, codegen.typeSystem, registerLineNumber, false) } finally { state.globalInlineContext.exitFromInlining() } diff --git a/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java index c7ea74e900b..301d6482c92 100644 --- a/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java @@ -6975,11 +6975,6 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirOldFronte runTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/dataClassCopy.kt"); } - @TestMetadata("defaults.kt") - public void testDefaults() throws Exception { - runTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/defaults.kt"); - } - @TestMetadata("delegationBy.kt") public void testDelegationBy() throws Exception { runTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/delegationBy.kt"); diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt index 795fcf15682..4db3ac82717 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt @@ -14,7 +14,10 @@ import org.jetbrains.kotlin.codegen.inline.* import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor -import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin +import org.jetbrains.kotlin.ir.declarations.IrFunction +import org.jetbrains.kotlin.ir.declarations.IrValueParameter +import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.types.IrType @@ -162,7 +165,8 @@ class IrInlineCodegen( function.origin == IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER, false, codegen.typeMapper.typeSystem, - false + registerLineNumberAfterwards = false, + isCallOfFunctionInCorrespondingDefaultDispatch = codegen.irFunction == codegen.context.mapping.defaultArgumentsDispatchFunction[function] ) } finally { state.globalInlineContext.exitFromInlining() diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt index a87b5459ce5..41ad4b7b80e 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt @@ -161,7 +161,7 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext) } fun build(): IrExpression = context.createJvmIrBuilder(currentScope!!.scope.scopeOwnerSymbol).run { - irBlock { + irBlock(irFunctionReference.startOffset, irFunctionReference.endOffset) { val constructor = createConstructor() createInvokeMethod( if (samSuperType != null && boundReceiver != null) { diff --git a/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/genericLambda.kt b/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/genericLambda.kt index 9886812a50b..f425be21738 100644 --- a/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/genericLambda.kt +++ b/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/genericLambda.kt @@ -1,3 +1,6 @@ +// Enable for dexing once we have a D8 version with a fix for +// https://issuetracker.google.com/148661132 +// IGNORE_DEXING // NO_CHECK_LAMBDA_INLINING // FILE: 1.kt package test diff --git a/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/simpleGeneric.kt b/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/simpleGeneric.kt index 8a5c76bffdb..a12b033da38 100644 --- a/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/simpleGeneric.kt +++ b/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/simpleGeneric.kt @@ -1,3 +1,6 @@ +// Enable for dexing once we have a D8 version with a fix for +// https://issuetracker.google.com/148661132 +// IGNORE_DEXING // FILE: 1.kt // SKIP_INLINE_CHECK_IN: inlineFun$default package test diff --git a/compiler/testData/codegen/boxInline/smap/assertion.kt b/compiler/testData/codegen/boxInline/smap/assertion.kt index d5cf6efbaed..0c681b914e8 100644 --- a/compiler/testData/codegen/boxInline/smap/assertion.kt +++ b/compiler/testData/codegen/boxInline/smap/assertion.kt @@ -1,4 +1,4 @@ -// IGNORE_BACKEND_MULTI_MODULE: JVM_IR + // FILE: 1.kt package test diff --git a/compiler/testData/codegen/boxInline/smap/defaultFunction.kt b/compiler/testData/codegen/boxInline/smap/defaultFunction.kt index d6444c2590f..453ce2687a2 100644 --- a/compiler/testData/codegen/boxInline/smap/defaultFunction.kt +++ b/compiler/testData/codegen/boxInline/smap/defaultFunction.kt @@ -1,4 +1,4 @@ -// IGNORE_BACKEND_MULTI_MODULE: JVM_IR + // FILE: 1.kt package test diff --git a/compiler/testData/codegen/boxInline/smap/defaultLambda/defaultLambdaInAnonymous.kt b/compiler/testData/codegen/boxInline/smap/defaultLambda/defaultLambdaInAnonymous.kt index 1635407260a..4b0e9394dd4 100644 --- a/compiler/testData/codegen/boxInline/smap/defaultLambda/defaultLambdaInAnonymous.kt +++ b/compiler/testData/codegen/boxInline/smap/defaultLambda/defaultLambdaInAnonymous.kt @@ -1,4 +1,4 @@ -// IGNORE_BACKEND_MULTI_MODULE: JVM_IR + // FILE: 1.kt // SKIP_INLINE_CHECK_IN: lParams$default diff --git a/compiler/testData/codegen/boxInline/smap/defaultLambda/inlinInDefault.kt b/compiler/testData/codegen/boxInline/smap/defaultLambda/inlinInDefault.kt index dbe9cbdeb6e..26daf557393 100644 --- a/compiler/testData/codegen/boxInline/smap/defaultLambda/inlinInDefault.kt +++ b/compiler/testData/codegen/boxInline/smap/defaultLambda/inlinInDefault.kt @@ -1,4 +1,4 @@ -// IGNORE_BACKEND_MULTI_MODULE: JVM_IR + // FILE: 1.kt // SKIP_INLINE_CHECK_IN: lParams$default diff --git a/compiler/testData/codegen/boxInline/smap/defaultLambda/inlineAnonymousInDefault.kt b/compiler/testData/codegen/boxInline/smap/defaultLambda/inlineAnonymousInDefault.kt index af4eda768f5..b7058acf289 100644 --- a/compiler/testData/codegen/boxInline/smap/defaultLambda/inlineAnonymousInDefault.kt +++ b/compiler/testData/codegen/boxInline/smap/defaultLambda/inlineAnonymousInDefault.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS -// IGNORE_BACKEND_MULTI_MODULE: JVM_IR + // FILE: 1.kt // SKIP_INLINE_CHECK_IN: lParams$default diff --git a/compiler/testData/codegen/boxInline/smap/defaultLambda/inlineAnonymousInDefault2.kt b/compiler/testData/codegen/boxInline/smap/defaultLambda/inlineAnonymousInDefault2.kt index 044bb93cbad..18a5f8a734b 100644 --- a/compiler/testData/codegen/boxInline/smap/defaultLambda/inlineAnonymousInDefault2.kt +++ b/compiler/testData/codegen/boxInline/smap/defaultLambda/inlineAnonymousInDefault2.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JS -// IGNORE_BACKEND_MULTI_MODULE: JVM_IR + // FILE: 1.kt // SKIP_INLINE_CHECK_IN: lParams$default diff --git a/compiler/testData/codegen/boxInline/smap/defaultLambda/kt21827.kt b/compiler/testData/codegen/boxInline/smap/defaultLambda/kt21827.kt index 3f99955313d..704d2e817bd 100644 --- a/compiler/testData/codegen/boxInline/smap/defaultLambda/kt21827.kt +++ b/compiler/testData/codegen/boxInline/smap/defaultLambda/kt21827.kt @@ -1,4 +1,4 @@ -// IGNORE_BACKEND_MULTI_MODULE: JVM_IR + // FILE: 1.kt // SKIP_INLINE_CHECK_IN: lParams$default diff --git a/compiler/testData/codegen/boxInline/smap/defaultLambda/nested.kt b/compiler/testData/codegen/boxInline/smap/defaultLambda/nested.kt index b15e5c97fbb..e6fdda62385 100644 --- a/compiler/testData/codegen/boxInline/smap/defaultLambda/nested.kt +++ b/compiler/testData/codegen/boxInline/smap/defaultLambda/nested.kt @@ -1,4 +1,4 @@ -// IGNORE_BACKEND_MULTI_MODULE: JVM_IR + // FILE: 1.kt // SKIP_INLINE_CHECK_IN: inlineFun$default diff --git a/compiler/testData/codegen/boxInline/smap/defaultLambda/simple.kt b/compiler/testData/codegen/boxInline/smap/defaultLambda/simple.kt index c8376e8a64b..5251252824c 100644 --- a/compiler/testData/codegen/boxInline/smap/defaultLambda/simple.kt +++ b/compiler/testData/codegen/boxInline/smap/defaultLambda/simple.kt @@ -1,4 +1,4 @@ -// IGNORE_BACKEND_MULTI_MODULE: JVM_IR + // FILE: 1.kt // SKIP_INLINE_CHECK_IN: inlineFun$default diff --git a/compiler/testData/codegen/boxInline/smap/defaultLambda/simple2.kt b/compiler/testData/codegen/boxInline/smap/defaultLambda/simple2.kt index 78709e798aa..9566eb2541d 100644 --- a/compiler/testData/codegen/boxInline/smap/defaultLambda/simple2.kt +++ b/compiler/testData/codegen/boxInline/smap/defaultLambda/simple2.kt @@ -1,4 +1,4 @@ -// IGNORE_BACKEND_MULTI_MODULE: JVM_IR + // FILE: 1.kt // SKIP_INLINE_CHECK_IN: lParams$default diff --git a/compiler/testData/debug/stepping/assertion.kt b/compiler/testData/debug/stepping/assertion.kt new file mode 100644 index 00000000000..baf90a80c2c --- /dev/null +++ b/compiler/testData/debug/stepping/assertion.kt @@ -0,0 +1,46 @@ +// IGNORE_BACKEND: JVM_IR +// FILE: test.kt +public val MASSERTIONS_ENABLED: Boolean = true + +public inline fun massert(value: Boolean, lazyMessage: () -> String) { + if (MASSERTIONS_ENABLED) { + if (!value) { + val message = lazyMessage() + throw AssertionError(message) + } + } +} + + +public inline fun massert(value: Boolean, message: Any = "Assertion failed") { + if (MASSERTIONS_ENABLED) { + if (!value) { + throw AssertionError(message) + } + } +} + +fun box(): String { + massert(true) + massert(true) { + "test" + } + + return "OK" +} + +// LINENUMBERS +// test.kt:24 +// test.kt:15 +// test.kt:16 +// test.kt:3 +// test.kt:16 +// test.kt:17 +// test.kt:21 +// test.kt:25 +// test.kt:6 +// test.kt:3 +// test.kt:6 +// test.kt:7 +// test.kt:12 +// test.kt:29 \ No newline at end of file diff --git a/compiler/testData/debug/stepping/simpleDefaultArg.kt b/compiler/testData/debug/stepping/simpleDefaultArg.kt new file mode 100644 index 00000000000..9c61c3b31e0 --- /dev/null +++ b/compiler/testData/debug/stepping/simpleDefaultArg.kt @@ -0,0 +1,16 @@ + +// FILE: test.kt +fun ifoo(ok: String = "OK"): String { + return ok +} + +fun box(): String { + return ifoo() +} + +// LINENUMBERS +// test.kt:8 +// test.kt:3 +// test.kt:4 +// test.kt:3 +// test.kt:8 \ No newline at end of file diff --git a/compiler/testData/debug/stepping/simpleDefaultArgWithInline.kt b/compiler/testData/debug/stepping/simpleDefaultArgWithInline.kt new file mode 100644 index 00000000000..6b2f4b1059f --- /dev/null +++ b/compiler/testData/debug/stepping/simpleDefaultArgWithInline.kt @@ -0,0 +1,15 @@ +// IGNORE_BACKEND: JVM_IR +// FILE: test.kt +inline fun ifoo(ok: String = "OK"): String { + return ok +} + +fun box(): String { + return ifoo() +} +// TODO: IR Backend behaves like simpleDefaultArg: 8,3,4, _3_ ,8 +// LINENUMBERS +// test.kt:8 +// test.kt:3 +// test.kt:4 +// test.kt:8 \ No newline at end of file diff --git a/compiler/testData/debug/stepping/simpleInlineDefaultArg.kt b/compiler/testData/debug/stepping/simpleInlineDefaultArg.kt new file mode 100644 index 00000000000..24eb6bc8d10 --- /dev/null +++ b/compiler/testData/debug/stepping/simpleInlineDefaultArg.kt @@ -0,0 +1,18 @@ +// IGNORE_BACKEND: JVM_IR +// FILE: test.kt +inline fun alsoInline() = "OK" + +inline fun ifoo(s: String = alsoInline()): String { + return s +} + +fun box(): String { + return ifoo() +} + +// LINENUMBERS +// test.kt:10 +// test.kt:5 +// test.kt:3 +// test.kt:6 +// test.kt:10 \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/defaults.fir.kt b/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/defaults.fir.kt deleted file mode 100644 index 2b1ff02393e..00000000000 --- a/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/defaults.fir.kt +++ /dev/null @@ -1,6 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_PARAMETER - -class C { - fun `a$default`(c: C, x: Int, m: Int, mh: Any) {} - fun a(x: Int = 1) {} -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction.kt b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction_ir.kt similarity index 88% rename from compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction.kt rename to compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction_ir.kt index ed43af21a90..f6d574e9eac 100644 --- a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction.kt +++ b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction_ir.kt @@ -1,3 +1,4 @@ +// TARGET_BACKEND: JVM_IR // !DIAGNOSTICS: -UNUSED_PARAMETER open class Base { diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction.txt b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction_ir.txt similarity index 100% rename from compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction.txt rename to compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction_ir.txt diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction_old.kt b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction_old.kt new file mode 100644 index 00000000000..ffb2e2ba8db --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction_old.kt @@ -0,0 +1,10 @@ +// TARGET_BACKEND: JVM_OLD +// !DIAGNOSTICS: -UNUSED_PARAMETER + +open class Base { + open fun `foo$default`(d: Derived, i: Int, mask: Int, mh: Any) {} +} + +class Derived : Base() { + fun foo(i: Int = 0) {} +} diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction_old.txt b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction_old.txt new file mode 100644 index 00000000000..9d23e55ff9f --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction_old.txt @@ -0,0 +1,18 @@ +package + +public open class Base { + public constructor Base() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open fun `foo$default`(/*0*/ d: Derived, /*1*/ i: kotlin.Int, /*2*/ mask: kotlin.Int, /*3*/ mh: kotlin.Any): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Derived : Base { + public constructor Derived() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(/*0*/ i: kotlin.Int = ...): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun `foo$default`(/*0*/ d: Derived, /*1*/ i: kotlin.Int, /*2*/ mask: kotlin.Int, /*3*/ mh: kotlin.Any): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/defaults.kt b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults_ir.kt similarity index 88% rename from compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/defaults.kt rename to compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults_ir.kt index 44ba8193349..1552db1d183 100644 --- a/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/defaults.kt +++ b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults_ir.kt @@ -1,3 +1,4 @@ +// TARGET_BACKEND: JVM_IR // !DIAGNOSTICS: -UNUSED_PARAMETER class C { diff --git a/compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/defaults.txt b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults_ir.txt similarity index 100% rename from compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/defaults.txt rename to compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults_ir.txt diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults.kt b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults_old.kt similarity index 87% rename from compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults.kt rename to compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults_old.kt index 44ba8193349..cbbb3c27826 100644 --- a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults.kt +++ b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults_old.kt @@ -1,3 +1,4 @@ +// TARGET_BACKEND: JVM_OLD // !DIAGNOSTICS: -UNUSED_PARAMETER class C { diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults.txt b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults_old.txt similarity index 100% rename from compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults.txt rename to compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults_old.txt diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index f6c08d136e4..c3c801688c1 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -6982,11 +6982,6 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTestWithFirVali runTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/dataClassCopy.kt"); } - @TestMetadata("defaults.kt") - public void testDefaults() throws Exception { - runTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/defaults.kt"); - } - @TestMetadata("delegationBy.kt") public void testDelegationBy() throws Exception { runTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/delegationBy.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJvmIrBackendGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJvmIrBackendGenerated.java index 362f516a1ca..f4fd5284928 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJvmIrBackendGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJvmIrBackendGenerated.java @@ -98,9 +98,9 @@ public class DiagnosticsTestWithJvmIrBackendGenerated extends AbstractDiagnostic runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/classPropertyOverriddenByFunction.kt"); } - @TestMetadata("defaultFunction.kt") - public void testDefaultFunction() throws Exception { - runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction.kt"); + @TestMetadata("defaultFunction_ir.kt") + public void testDefaultFunction_ir() throws Exception { + runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction_ir.kt"); } @TestMetadata("delegatedFunctionOverriddenByProperty_ir.kt") @@ -433,9 +433,9 @@ public class DiagnosticsTestWithJvmIrBackendGenerated extends AbstractDiagnostic runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/dataClassCopy.kt"); } - @TestMetadata("defaults.kt") - public void testDefaults() throws Exception { - runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults.kt"); + @TestMetadata("defaults_ir.kt") + public void testDefaults_ir() throws Exception { + runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults_ir.kt"); } @TestMetadata("delegationBy_ir.kt") diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithOldJvmBackendGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithOldJvmBackendGenerated.java index 692f89efeca..ef4a69e370c 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithOldJvmBackendGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithOldJvmBackendGenerated.java @@ -103,9 +103,9 @@ public class DiagnosticsTestWithOldJvmBackendGenerated extends AbstractDiagnosti runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/classPropertyOverriddenByFunction.kt"); } - @TestMetadata("defaultFunction.kt") - public void testDefaultFunction() throws Exception { - runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction.kt"); + @TestMetadata("defaultFunction_old.kt") + public void testDefaultFunction_old() throws Exception { + runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/defaultFunction_old.kt"); } @TestMetadata("delegatedFunctionOverriddenByProperty_old.kt") @@ -428,9 +428,9 @@ public class DiagnosticsTestWithOldJvmBackendGenerated extends AbstractDiagnosti runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/dataClassCopy.kt"); } - @TestMetadata("defaults.kt") - public void testDefaults() throws Exception { - runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults.kt"); + @TestMetadata("defaults_old.kt") + public void testDefaults_old() throws Exception { + runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/specialNames/defaults_old.kt"); } @TestMetadata("delegationBy_old.kt") diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index f0073384104..8db5b07f886 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -6977,11 +6977,6 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/dataClassCopy.kt"); } - @TestMetadata("defaults.kt") - public void testDefaults() throws Exception { - runTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/defaults.kt"); - } - @TestMetadata("delegationBy.kt") public void testDelegationBy() throws Exception { runTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/delegationBy.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/debugInformation/IrSteppingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/debugInformation/IrSteppingTestGenerated.java index ca2ba98ced9..27578690b49 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/debugInformation/IrSteppingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/debugInformation/IrSteppingTestGenerated.java @@ -31,6 +31,12 @@ public class IrSteppingTestGenerated extends AbstractIrSteppingTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/debug/stepping"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); } + @Test + @TestMetadata("assertion.kt") + public void testAssertion() throws Exception { + runTest("compiler/testData/debug/stepping/assertion.kt"); + } + @Test @TestMetadata("callableReference.kt") public void testCallableReference() throws Exception { @@ -103,6 +109,24 @@ public class IrSteppingTestGenerated extends AbstractIrSteppingTest { runTest("compiler/testData/debug/stepping/recursion.kt"); } + @Test + @TestMetadata("simpleDefaultArg.kt") + public void testSimpleDefaultArg() throws Exception { + runTest("compiler/testData/debug/stepping/simpleDefaultArg.kt"); + } + + @Test + @TestMetadata("simpleDefaultArgWithInline.kt") + public void testSimpleDefaultArgWithInline() throws Exception { + runTest("compiler/testData/debug/stepping/simpleDefaultArgWithInline.kt"); + } + + @Test + @TestMetadata("simpleInlineDefaultArg.kt") + public void testSimpleInlineDefaultArg() throws Exception { + runTest("compiler/testData/debug/stepping/simpleInlineDefaultArg.kt"); + } + @Test @TestMetadata("throwException.kt") public void testThrowException() throws Exception { diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/debugInformation/SteppingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/debugInformation/SteppingTestGenerated.java index 33416e44881..5ada2b10831 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/debugInformation/SteppingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/debugInformation/SteppingTestGenerated.java @@ -31,6 +31,12 @@ public class SteppingTestGenerated extends AbstractSteppingTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/debug/stepping"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true); } + @Test + @TestMetadata("assertion.kt") + public void testAssertion() throws Exception { + runTest("compiler/testData/debug/stepping/assertion.kt"); + } + @Test @TestMetadata("callableReference.kt") public void testCallableReference() throws Exception { @@ -103,6 +109,24 @@ public class SteppingTestGenerated extends AbstractSteppingTest { runTest("compiler/testData/debug/stepping/recursion.kt"); } + @Test + @TestMetadata("simpleDefaultArg.kt") + public void testSimpleDefaultArg() throws Exception { + runTest("compiler/testData/debug/stepping/simpleDefaultArg.kt"); + } + + @Test + @TestMetadata("simpleDefaultArgWithInline.kt") + public void testSimpleDefaultArgWithInline() throws Exception { + runTest("compiler/testData/debug/stepping/simpleDefaultArgWithInline.kt"); + } + + @Test + @TestMetadata("simpleInlineDefaultArg.kt") + public void testSimpleInlineDefaultArg() throws Exception { + runTest("compiler/testData/debug/stepping/simpleInlineDefaultArg.kt"); + } + @Test @TestMetadata("throwException.kt") public void testThrowException() throws Exception {