From dfcf2cfa8463eef3cdb3838d9c1be5040802e3c5 Mon Sep 17 00:00:00 2001 From: Pavel Kunyavskiy Date: Fri, 24 Jun 2022 11:42:46 +0200 Subject: [PATCH] [K/N] Fix extracting local classes from lambda in cached inline function ^KT-52540 --- .../FirBlackBoxCodegenTestGenerated.java | 6 ++++++ .../common/lower/LocalDeclarationsLowering.kt | 2 +- .../testData/codegen/box/objects/kt52540.kt | 18 ++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../IrBlackBoxCodegenTestGenerated.java | 6 ++++++ .../LightAnalysisModeTestGenerated.java | 5 +++++ .../js/test/JsCodegenBoxTestGenerated.java | 6 ++++++ .../test/ir/IrJsCodegenBoxTestGenerated.java | 6 ++++++ .../IrCodegenBoxWasmTestGenerated.java | 5 +++++ .../kotlin/backend/konan/llvm/IrToBitcode.kt | 8 ++++---- .../NativeCodegenBoxTestGenerated.java | 6 ++++++ 11 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 compiler/testData/codegen/box/objects/kt52540.kt diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index adf83a8a6fd..63c972bcc46 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -32263,6 +32263,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/objects/kt46136.kt"); } + @Test + @TestMetadata("kt52540.kt") + public void testKt52540() throws Exception { + runTest("compiler/testData/codegen/box/objects/kt52540.kt"); + } + @Test @TestMetadata("kt535.kt") public void testKt535() throws Exception { diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt index e5d04d30854..dce0a538485 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt @@ -883,7 +883,7 @@ class LocalDeclarationsLowering( } private fun collectLocalDeclarations() { - val enclosingFile = container.file + val enclosingFile by lazy { container.file } val enclosingClass = run { var currentParent = container as? IrClass ?: container.parent while (currentParent is IrDeclaration && currentParent !is IrClass) { diff --git a/compiler/testData/codegen/box/objects/kt52540.kt b/compiler/testData/codegen/box/objects/kt52540.kt new file mode 100644 index 00000000000..f0060f026c8 --- /dev/null +++ b/compiler/testData/codegen/box/objects/kt52540.kt @@ -0,0 +1,18 @@ +// IGNORE_BACKEND: WASM +// MODULE: lib +// FILE: lib.kt +interface I { + fun result(): String +} + +inline fun foo(block: () -> T): T = block() + +inline fun bar() = foo { + object : I { + override fun result() = "OK" + } +} + +// MODULE: main(lib) +// FILE: box.kt +fun box() = bar().result() \ No newline at end of file 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 c24dc549dfa..465cdcd7053 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 @@ -31759,6 +31759,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/objects/kt46136.kt"); } + @Test + @TestMetadata("kt52540.kt") + public void testKt52540() throws Exception { + runTest("compiler/testData/codegen/box/objects/kt52540.kt"); + } + @Test @TestMetadata("kt535.kt") public void testKt535() throws Exception { 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 553ebc1a10f..48b0aeff6ae 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 @@ -32263,6 +32263,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/objects/kt46136.kt"); } + @Test + @TestMetadata("kt52540.kt") + public void testKt52540() throws Exception { + runTest("compiler/testData/codegen/box/objects/kt52540.kt"); + } + @Test @TestMetadata("kt535.kt") public void testKt535() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 0ce64681c08..1f1fc38f542 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -27042,6 +27042,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/objects/kt46136.kt"); } + @TestMetadata("kt52540.kt") + public void testKt52540() throws Exception { + runTest("compiler/testData/codegen/box/objects/kt52540.kt"); + } + @TestMetadata("kt535.kt") public void testKt535() throws Exception { runTest("compiler/testData/codegen/box/objects/kt535.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java index c44a51d9f04..fae7cc16e2b 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java @@ -23049,6 +23049,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/objects/kt46136.kt"); } + @Test + @TestMetadata("kt52540.kt") + public void testKt52540() throws Exception { + runTest("compiler/testData/codegen/box/objects/kt52540.kt"); + } + @Test @TestMetadata("kt535.kt") public void testKt535() throws Exception { 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 f7e96a50332..45fd592f668 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 @@ -23013,6 +23013,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/objects/kt46136.kt"); } + @Test + @TestMetadata("kt52540.kt") + public void testKt52540() throws Exception { + runTest("compiler/testData/codegen/box/objects/kt52540.kt"); + } + @Test @TestMetadata("kt535.kt") public void testKt535() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index efad935e1ac..6f7178af7eb 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -20595,6 +20595,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/objects/kt46136.kt"); } + @TestMetadata("kt52540.kt") + public void testKt52540() throws Exception { + runTest("compiler/testData/codegen/box/objects/kt52540.kt"); + } + @TestMetadata("kt535.kt") public void testKt535() throws Exception { runTest("compiler/testData/codegen/box/objects/kt535.kt"); diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt index 0d075093a16..30c5a3a3463 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt @@ -832,10 +832,10 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map