diff --git a/compiler/testData/codegen/box/inference/builderInferenceLeakingVariable.kt b/compiler/testData/codegen/box/inference/builderInferenceLeakingVariable.kt new file mode 100644 index 00000000000..2acf018d39c --- /dev/null +++ b/compiler/testData/codegen/box/inference/builderInferenceLeakingVariable.kt @@ -0,0 +1,39 @@ +// Issues: KT-33542, KT-33544 +// WITH_RUNTIME +// KJS_WITH_FULL_RUNTIME +// IGNORE_BACKEND_FIR: JVM_IR +// !LANGUAGE: +NewInference + +import kotlin.experimental.ExperimentalTypeInference + +interface In { + suspend fun send(element: E) +} + +class InImpl(val block: suspend In.() -> Unit) : In { + override suspend fun send(element: E) {} +} + +@OptIn(ExperimentalTypeInference::class) +public fun builder(@BuilderInference block: suspend In.() -> Unit) { + InImpl(block) +} + +fun test33542() { + builder { + send(run { + 15 + }) + } +} + +fun test33544(){ + builder { + send(run { + let { 0 } ?: 1 + 0 + }) + } +} + +fun box() = "OK" diff --git a/compiler/testData/codegen/box/inference/kt36446.kt b/compiler/testData/codegen/box/inference/kt36446.kt new file mode 100644 index 00000000000..b309bb63fdf --- /dev/null +++ b/compiler/testData/codegen/box/inference/kt36446.kt @@ -0,0 +1,41 @@ +// !LANGUAGE: +NewInference +// WITH_RUNTIME +// KJS_WITH_FULL_RUNTIME +// IGNORE_BACKEND_FIR: JVM_IR +// WITH_REFLECT + +import kotlin.experimental.ExperimentalTypeInference +import kotlin.reflect.KProperty + +fun box(): String { + definition { + conversion { + val offset by argument { + // UnsupportedOperationException: no descriptor for type constructor of IntegerLiteralType[Int,Long,Byte,Short] + defaultInt(0) + } + } + } + return "OK" +} + +interface Transaction +fun definition(configure: DefinitionBuilder.() -> Unit): Unit {} +class ArgumentBuilder { + fun defaultInt(default: Int): Unit {} +} +class ConversionBuilder { + fun argument( + configure: ArgumentBuilder.() -> Unit + ): ArgumentDefinition = null as ArgumentDefinition +} +class DefinitionBuilder { + @OptIn(ExperimentalTypeInference::class) + fun conversion(@BuilderInference configure: ConversionBuilder.() -> Unit): Unit {} +} +interface ArgumentDefinition { + operator fun provideDelegate(thisRef: Any?, property: KProperty<*>): ArgumentReference +} +interface ArgumentReference { + operator fun getValue(thisRef: Any?, property: KProperty<*>): Value +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index ca6a4af35c2..697df275aa5 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -12702,6 +12702,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inference/builderInference.kt"); } + @TestMetadata("builderInferenceLeakingVariable.kt") + public void testBuilderInferenceLeakingVariable() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInferenceLeakingVariable.kt"); + } + @TestMetadata("capturedStarProjection.kt") public void testCapturedStarProjection() throws Exception { runTest("compiler/testData/codegen/box/inference/capturedStarProjection.kt"); @@ -12732,6 +12737,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inference/kt35684.kt"); } + @TestMetadata("kt36446.kt") + public void testKt36446() throws Exception { + runTest("compiler/testData/codegen/box/inference/kt36446.kt"); + } + @TestMetadata("lastExpressionOfLambdaWithNothingConstraint.kt") public void testLastExpressionOfLambdaWithNothingConstraint() throws Exception { runTest("compiler/testData/codegen/box/inference/lastExpressionOfLambdaWithNothingConstraint.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 7abfd333aee..1e7e5f7b573 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -12702,6 +12702,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inference/builderInference.kt"); } + @TestMetadata("builderInferenceLeakingVariable.kt") + public void testBuilderInferenceLeakingVariable() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInferenceLeakingVariable.kt"); + } + @TestMetadata("capturedStarProjection.kt") public void testCapturedStarProjection() throws Exception { runTest("compiler/testData/codegen/box/inference/capturedStarProjection.kt"); @@ -12732,6 +12737,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inference/kt35684.kt"); } + @TestMetadata("kt36446.kt") + public void testKt36446() throws Exception { + runTest("compiler/testData/codegen/box/inference/kt36446.kt"); + } + @TestMetadata("lastExpressionOfLambdaWithNothingConstraint.kt") public void testLastExpressionOfLambdaWithNothingConstraint() throws Exception { runTest("compiler/testData/codegen/box/inference/lastExpressionOfLambdaWithNothingConstraint.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index 76a6871fa01..65b9cfb3ef6 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -11577,6 +11577,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/inference/builderInference.kt"); } + @TestMetadata("builderInferenceLeakingVariable.kt") + public void testBuilderInferenceLeakingVariable() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInferenceLeakingVariable.kt"); + } + @TestMetadata("capturedStarProjection.kt") public void testCapturedStarProjection() throws Exception { runTest("compiler/testData/codegen/box/inference/capturedStarProjection.kt"); @@ -11607,6 +11612,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/inference/kt35684.kt"); } + @TestMetadata("kt36446.kt") + public void testKt36446() throws Exception { + runTest("compiler/testData/codegen/box/inference/kt36446.kt"); + } + @TestMetadata("lastExpressionOfLambdaWithNothingConstraint.kt") public void testLastExpressionOfLambdaWithNothingConstraint() throws Exception { runTest("compiler/testData/codegen/box/inference/lastExpressionOfLambdaWithNothingConstraint.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index c464252e3ff..2ed960f898b 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -11577,6 +11577,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inference/builderInference.kt"); } + @TestMetadata("builderInferenceLeakingVariable.kt") + public void testBuilderInferenceLeakingVariable() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInferenceLeakingVariable.kt"); + } + @TestMetadata("capturedStarProjection.kt") public void testCapturedStarProjection() throws Exception { runTest("compiler/testData/codegen/box/inference/capturedStarProjection.kt"); @@ -11607,6 +11612,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inference/kt35684.kt"); } + @TestMetadata("kt36446.kt") + public void testKt36446() throws Exception { + runTest("compiler/testData/codegen/box/inference/kt36446.kt"); + } + @TestMetadata("lastExpressionOfLambdaWithNothingConstraint.kt") public void testLastExpressionOfLambdaWithNothingConstraint() throws Exception { runTest("compiler/testData/codegen/box/inference/lastExpressionOfLambdaWithNothingConstraint.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index f8345fed6a3..52eaa2b8201 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -9947,6 +9947,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true); } + @TestMetadata("builderInferenceLeakingVariable.kt") + public void testBuilderInferenceLeakingVariable() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInferenceLeakingVariable.kt"); + } + @TestMetadata("capturedStarProjection.kt") public void testCapturedStarProjection() throws Exception { runTest("compiler/testData/codegen/box/inference/capturedStarProjection.kt"); @@ -9972,6 +9977,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inference/kt35684.kt"); } + @TestMetadata("kt36446.kt") + public void testKt36446() throws Exception { + runTest("compiler/testData/codegen/box/inference/kt36446.kt"); + } + @TestMetadata("lastExpressionOfLambdaWithNothingConstraint.kt") public void testLastExpressionOfLambdaWithNothingConstraint() throws Exception { runTest("compiler/testData/codegen/box/inference/lastExpressionOfLambdaWithNothingConstraint.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 7bda85d6c29..fe47cb4358e 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -10012,6 +10012,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS, true); } + @TestMetadata("builderInferenceLeakingVariable.kt") + public void testBuilderInferenceLeakingVariable() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInferenceLeakingVariable.kt"); + } + @TestMetadata("capturedStarProjection.kt") public void testCapturedStarProjection() throws Exception { runTest("compiler/testData/codegen/box/inference/capturedStarProjection.kt"); @@ -10037,6 +10042,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inference/kt35684.kt"); } + @TestMetadata("kt36446.kt") + public void testKt36446() throws Exception { + runTest("compiler/testData/codegen/box/inference/kt36446.kt"); + } + @TestMetadata("lastExpressionOfLambdaWithNothingConstraint.kt") public void testLastExpressionOfLambdaWithNothingConstraint() throws Exception { runTest("compiler/testData/codegen/box/inference/lastExpressionOfLambdaWithNothingConstraint.kt");