From e1180adfbdef650b2747d0790fddf65204dfeb7f Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Wed, 6 Mar 2024 14:38:17 +0100 Subject: [PATCH] [Native] Always cast expression to the expected type after inline Right now, during the process of inlining, the compiler erases types. Because of that, we can end up with some random type (for example, `Any`) where the concrete type was expected (for example, `Int`). Compiler must insert a cast in the required places. #KT-66017 Fixed --- ...LFirBlackBoxCodegenBasedTestGenerated.java | 18 +++++++++++++++++ ...rsedBlackBoxCodegenBasedTestGenerated.java | 18 +++++++++++++++++ ...LightTreeBlackBoxCodegenTestGenerated.java | 18 +++++++++++++++++ ...2IrFakeOverrideGeneratorTestGenerated.java | 18 +++++++++++++++++ .../FirPsiBlackBoxCodegenTestGenerated.java | 18 +++++++++++++++++ .../common/TailSuspendCallsCollector.kt | 17 ++++++++++++++-- .../inlinedLambdaWithErasedParamType.kt | 15 ++++++++++++++ .../testData/codegen/box/inline/kt66017.kt | 10 ++++++++++ .../inline/kt66017_inlineFromTheSameModule.kt | 20 +++++++++++++++++++ .../JvmAbiConsistencyTestBoxGenerated.java | 18 +++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 18 +++++++++++++++++ .../IrBlackBoxCodegenTestGenerated.java | 18 +++++++++++++++++ ...kBoxCodegenWithIrInlinerTestGenerated.java | 18 +++++++++++++++++ ...xCodegenTestWithInlineScopesGenerated.java | 18 +++++++++++++++++ .../LightAnalysisModeTestGenerated.java | 15 ++++++++++++++ .../fir/FirJsCodegenBoxTestGenerated.java | 18 +++++++++++++++++ .../fir/FirJsES6CodegenBoxTestGenerated.java | 18 +++++++++++++++++ .../test/ir/IrJsCodegenBoxTestGenerated.java | 18 +++++++++++++++++ .../ir/IrJsES6CodegenBoxTestGenerated.java | 18 +++++++++++++++++ .../driver/phases/NativeLoweringPhases.kt | 3 ++- .../konan/lower/VolatileFieldsLowering.kt | 1 + .../FirNativeCodegenBoxTestGenerated.java | 18 +++++++++++++++++ .../FirNativeCodegenBoxTestNoPLGenerated.java | 18 +++++++++++++++++ .../NativeCodegenBoxTestGenerated.java | 18 +++++++++++++++++ .../NativeCodegenBoxTestNoPLGenerated.java | 18 +++++++++++++++++ .../FirWasmJsCodegenBoxTestGenerated.java | 18 +++++++++++++++++ .../test/K1WasmCodegenBoxTestGenerated.java | 18 +++++++++++++++++ 27 files changed, 438 insertions(+), 3 deletions(-) create mode 100644 compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt create mode 100644 compiler/testData/codegen/box/inline/kt66017.kt create mode 100644 compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java index 918ee8edef3..782f7fb5dc8 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java @@ -24744,12 +24744,30 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java index b18b0e1256d..08732292f86 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java @@ -24744,12 +24744,30 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java index 4c842b09a52..ef8d472f0c1 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java @@ -24667,12 +24667,30 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithFir2IrFakeOverrideGeneratorTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithFir2IrFakeOverrideGeneratorTestGenerated.java index cc6ec79b479..7b410137d6f 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithFir2IrFakeOverrideGeneratorTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithFir2IrFakeOverrideGeneratorTestGenerated.java @@ -24667,12 +24667,30 @@ public class FirLightTreeBlackBoxCodegenWithFir2IrFakeOverrideGeneratorTestGener runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java index c79446d5879..46ca09015a9 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java @@ -24667,12 +24667,30 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailSuspendCallsCollector.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailSuspendCallsCollector.kt index 2b98855f353..817e5884dd3 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailSuspendCallsCollector.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailSuspendCallsCollector.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.ir.types.isUnit import org.jetbrains.kotlin.ir.util.isSuspend import org.jetbrains.kotlin.ir.util.render import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid data class TailSuspendCalls(val callSites: Set, val hasNotTailSuspendCalls: Boolean) @@ -36,6 +37,14 @@ fun collectTailSuspendCalls(context: CommonBackendContext, irFunction: IrSimpleF element.acceptChildren(this, VisitorState(data.insideTryBlock, isTailExpression = false)) } + override fun visitTypeOperator(expression: IrTypeOperatorCall, data: VisitorState) { + if (expression.operator == IrTypeOperator.IMPLICIT_CAST) { + expression.acceptChildren(this, data) + } else { + super.visitTypeOperator(expression, data) + } + } + override fun visitTry(aTry: IrTry, data: VisitorState) { aTry.tryResult.accept(this, VisitorState(insideTryBlock = true, isTailExpression = false)) aTry.catches.forEach { it.result.accept(this, data) } @@ -98,8 +107,12 @@ fun collectTailSuspendCalls(context: CommonBackendContext, irFunction: IrSimpleF expression.acceptChildren(this, VisitorState(data.insideTryBlock, isTailExpression)) } - private fun IrExpression.isUnitRead(): Boolean = - this is IrGetObjectValue && symbol == context.irBuiltIns.unitClass + private fun IrExpression.isUnitRead(): Boolean { + if (this is IrTypeOperatorCall) { + return this.argument.isUnitRead() + } + return this is IrGetObjectValue && symbol == context.irBuiltIns.unitClass + } private fun IrCall.isReturnIfSuspendedCall() = symbol == context.ir.symbols.returnIfSuspended diff --git a/compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt b/compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt new file mode 100644 index 00000000000..56caf996f42 --- /dev/null +++ b/compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt @@ -0,0 +1,15 @@ +class A(val prop: T) + +inline fun A.process(action: (T) -> Unit) { + action(prop) +} + +inline fun acceptInt(p: Int, action: (Int) -> Unit) { + action(p) +} + +fun box(): String { + var x = 0 + A(1).process { acceptInt(it) { p -> x += p } } + return ('N' + x).toString() + "K" +} diff --git a/compiler/testData/codegen/box/inline/kt66017.kt b/compiler/testData/codegen/box/inline/kt66017.kt new file mode 100644 index 00000000000..96018fa97df --- /dev/null +++ b/compiler/testData/codegen/box/inline/kt66017.kt @@ -0,0 +1,10 @@ +// WITH_STDLIB + +fun box(): String { + listOf(1).forEach { size -> + repeat(size) { + return "OK" + } + } + return "Fail" +} diff --git a/compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt b/compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt new file mode 100644 index 00000000000..aefb170b9cb --- /dev/null +++ b/compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt @@ -0,0 +1,20 @@ +// WITH_STDLIB +inline fun Iterable.myForEach(action: (T) -> Unit): Unit { + for (element in this) action(element) +} + +inline fun myRepeat(times: Int, action: (Int) -> Unit) { + for (index in 0 until times) { + action(index) + } +} + + +fun box(): String { + listOf(1).myForEach { size -> + myRepeat(size) { + return "OK" + } + } + return "Fail" +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java index af9f4cf1e8e..632e28649e3 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java @@ -24667,12 +24667,30 @@ public class JvmAbiConsistencyTestBoxGenerated extends AbstractJvmAbiConsistency runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index 4af6d546b2f..99a2f9beb4f 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -23431,6 +23431,24 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 403f457cff8..e0791b133a9 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -24667,12 +24667,30 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java index 21db76055e4..d9813a65cbd 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java @@ -24667,12 +24667,30 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java index 085ad445e11..00d681eda29 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java @@ -24667,12 +24667,30 @@ public class FirBlackBoxCodegenTestWithInlineScopesGenerated extends AbstractFir runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 71745a679fd..0a368fabbbe 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -20683,11 +20683,26 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { runTest("compiler/testData/codegen/box/inline/lambdaAsAny.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java index 03c40395840..0655562a850 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java @@ -18811,12 +18811,30 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java index a8dc0a67161..3dafe7e5e88 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java @@ -18811,12 +18811,30 @@ public class FirJsES6CodegenBoxTestGenerated extends AbstractFirJsES6CodegenBoxT runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java index aa1dda3c5a6..801f7b88fce 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java @@ -18811,12 +18811,30 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java index 20fe16b4b44..12c568c781f 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java @@ -18811,12 +18811,30 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/NativeLoweringPhases.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/NativeLoweringPhases.kt index 8aa8ec847b1..80fca424f37 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/NativeLoweringPhases.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/NativeLoweringPhases.kt @@ -347,7 +347,8 @@ private val inlinePhase = createFileLoweringPhase( FunctionInlining( context.context, NativeInlineFunctionResolver(context.context, context), - alwaysCreateTemporaryVariablesForArguments = context.shouldContainDebugInfo() + alwaysCreateTemporaryVariablesForArguments = true, + insertAdditionalImplicitCasts = true, ).lower(irFile) } } diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/VolatileFieldsLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/VolatileFieldsLowering.kt index 8779d0bbdff..431ce600a86 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/VolatileFieldsLowering.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/VolatileFieldsLowering.kt @@ -214,6 +214,7 @@ internal class VolatileFieldsLowering(val context: Context) : FileLoweringPass { expectedReturn == null && expression is IrReturnableBlock -> getConstPropertyReference(expression.singleExpressionOrNull, expression.symbol) expression is IrReturn && expression.returnTargetSymbol == expectedReturn -> getConstPropertyReference(expression.value, null) expression is IrBlock -> getConstPropertyReference(expression.singleExpressionOrNull, expectedReturn) + expression is IrTypeOperatorCall && expression.operator == IrTypeOperator.IMPLICIT_CAST -> getConstPropertyReference(expression.argument, expectedReturn) else -> null } } diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java index 244a72c30e5..002a3f6022a 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java @@ -20100,12 +20100,30 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java index 5342e687b38..2b0e5d3996e 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java @@ -20530,12 +20530,30 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java index 3a91c319eb3..8bcaaf8ac3c 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java @@ -19670,12 +19670,30 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java index d8cf5966ce3..63c5d769a2e 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java @@ -20101,12 +20101,30 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmJsCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmJsCodegenBoxTestGenerated.java index 4cfcd0b6fae..b6b14d45166 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmJsCodegenBoxTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmJsCodegenBoxTestGenerated.java @@ -18841,12 +18841,30 @@ public class FirWasmJsCodegenBoxTestGenerated extends AbstractFirWasmJsCodegenBo runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java index 59b0c48dc3c..3bc699dd2ae 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java @@ -18841,12 +18841,30 @@ public class K1WasmCodegenBoxTestGenerated extends AbstractK1WasmCodegenBoxTest runTest("compiler/testData/codegen/box/inline/inlineCtor.kt"); } + @Test + @TestMetadata("inlinedLambdaWithErasedParamType.kt") + public void testInlinedLambdaWithErasedParamType() { + runTest("compiler/testData/codegen/box/inline/inlinedLambdaWithErasedParamType.kt"); + } + @Test @TestMetadata("innerInlineFunCapturesOuter.kt") public void testInnerInlineFunCapturesOuter() { runTest("compiler/testData/codegen/box/inline/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("kt66017.kt") + public void testKt66017() { + runTest("compiler/testData/codegen/box/inline/kt66017.kt"); + } + + @Test + @TestMetadata("kt66017_inlineFromTheSameModule.kt") + public void testKt66017_inlineFromTheSameModule() { + runTest("compiler/testData/codegen/box/inline/kt66017_inlineFromTheSameModule.kt"); + } + @Test @TestMetadata("lambdaAsAny.kt") public void testLambdaAsAny() {