From 60bc0f4baf67f14e8cb8f3ce8c9e6b46820dfb96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Mon, 17 May 2021 12:33:09 +0200 Subject: [PATCH] IR: Lower shared variables in enum entries (KT-46605) --- .../FirBlackBoxCodegenTestGenerated.java | 6 ++++++ .../common/lower/SharedVariablesLowering.kt | 5 +---- compiler/testData/codegen/box/enum/kt46605.kt | 17 +++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/LightAnalysisModeTestGenerated.java | 5 +++++ .../IrJsCodegenBoxES6TestGenerated.java | 5 +++++ .../semantics/IrJsCodegenBoxTestGenerated.java | 5 +++++ .../semantics/JsCodegenBoxTestGenerated.java | 5 +++++ .../IrCodegenBoxWasmTestGenerated.java | 5 +++++ 10 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 compiler/testData/codegen/box/enum/kt46605.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 b37e74ab774..5b2a4c3e0a7 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 @@ -14538,6 +14538,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/enum/kt44744_innerClass.kt"); } + @Test + @TestMetadata("kt46605.kt") + public void testKt46605() throws Exception { + runTest("compiler/testData/codegen/box/enum/kt46605.kt"); + } + @Test @TestMetadata("kt7257.kt") public void testKt7257() throws Exception { diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SharedVariablesLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SharedVariablesLowering.kt index f72676977a2..61a90d47a23 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SharedVariablesLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SharedVariablesLowering.kt @@ -40,10 +40,7 @@ val sharedVariablesPhase = makeIrFilePhase( class SharedVariablesLowering(val context: BackendContext) : BodyLoweringPass { override fun lower(irBody: IrBody, container: IrDeclaration) { - // TODO remove this condition - if (container is IrFunction || container is IrField || container is IrAnonymousInitializer) { - SharedVariablesTransformer(irBody, container).lowerSharedVariables() - } + SharedVariablesTransformer(irBody, container).lowerSharedVariables() } private inner class SharedVariablesTransformer(val irBody: IrBody, val irDeclaration: IrDeclaration) { diff --git a/compiler/testData/codegen/box/enum/kt46605.kt b/compiler/testData/codegen/box/enum/kt46605.kt new file mode 100644 index 00000000000..fb275d0c164 --- /dev/null +++ b/compiler/testData/codegen/box/enum/kt46605.kt @@ -0,0 +1,17 @@ +fun call(f: () -> Unit) { + f() +} + +enum class E(val f: () -> String) { + A({ + var value = "Fail" + call { + value = "OK" + } + value + }) +} + +fun box(): String { + return E.A.f() +} 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 453e0872894..b4f7a10b741 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 @@ -14538,6 +14538,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/enum/kt44744_innerClass.kt"); } + @Test + @TestMetadata("kt46605.kt") + public void testKt46605() throws Exception { + runTest("compiler/testData/codegen/box/enum/kt46605.kt"); + } + @Test @TestMetadata("kt7257.kt") public void testKt7257() 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 cf566d3d86f..68da2942479 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 @@ -14538,6 +14538,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/enum/kt44744_innerClass.kt"); } + @Test + @TestMetadata("kt46605.kt") + public void testKt46605() throws Exception { + runTest("compiler/testData/codegen/box/enum/kt46605.kt"); + } + @Test @TestMetadata("kt7257.kt") public void testKt7257() 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 cdf1b995ea8..1e37a84f80a 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -11899,6 +11899,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/enum/kt44744_innerClass.kt"); } + @TestMetadata("kt46605.kt") + public void testKt46605() throws Exception { + runTest("compiler/testData/codegen/box/enum/kt46605.kt"); + } + @TestMetadata("kt7257.kt") public void testKt7257() throws Exception { runTest("compiler/testData/codegen/box/enum/kt7257.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index 7b62ea6872c..9188ab9fd52 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -10633,6 +10633,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/enum/kt44744_innerClass.kt"); } + @TestMetadata("kt46605.kt") + public void testKt46605() throws Exception { + runTest("compiler/testData/codegen/box/enum/kt46605.kt"); + } + @TestMetadata("kt7257.kt") public void testKt7257() throws Exception { runTest("compiler/testData/codegen/box/enum/kt7257.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 84108a71c0e..0a1be8319de 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -10039,6 +10039,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/enum/kt44744_innerClass.kt"); } + @TestMetadata("kt46605.kt") + public void testKt46605() throws Exception { + runTest("compiler/testData/codegen/box/enum/kt46605.kt"); + } + @TestMetadata("kt7257.kt") public void testKt7257() throws Exception { runTest("compiler/testData/codegen/box/enum/kt7257.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index d198a452c02..19cfb06df6c 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -10039,6 +10039,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/enum/kt44744_innerClass.kt"); } + @TestMetadata("kt46605.kt") + public void testKt46605() throws Exception { + runTest("compiler/testData/codegen/box/enum/kt46605.kt"); + } + @TestMetadata("kt7257.kt") public void testKt7257() throws Exception { runTest("compiler/testData/codegen/box/enum/kt7257.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index 08bbae68371..f2c83f14d6f 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -4902,6 +4902,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/enum/kt44744_innerClass.kt"); } + @TestMetadata("kt46605.kt") + public void testKt46605() throws Exception { + runTest("compiler/testData/codegen/box/enum/kt46605.kt"); + } + @TestMetadata("kt7257.kt") public void testKt7257() throws Exception { runTest("compiler/testData/codegen/box/enum/kt7257.kt");