From 7b4e6bae0ed2077dc08f98c854bb689f372a6e1b Mon Sep 17 00:00:00 2001 From: Xin Wang Date: Thu, 4 May 2023 10:17:29 +0800 Subject: [PATCH] JVM: ensure the $ENTRIES field is initialized before use #KT-57784 Fixed --- ...FirLightTreeBlackBoxCodegenTestGenerated.java | 6 ++++++ .../FirPsiBlackBoxCodegenTestGenerated.java | 6 ++++++ .../jvm/lower/StaticInitializersLowering.kt | 5 +++-- .../codegen/box/enum/enumEntriesInCompanion.kt | 16 ++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ ...lackBoxCodegenWithIrInlinerTestGenerated.java | 6 ++++++ .../codegen/LightAnalysisModeTestGenerated.java | 5 +++++ .../js/test/JsCodegenBoxTestGenerated.java | 6 ++++++ .../test/fir/FirJsCodegenBoxTestGenerated.java | 6 ++++++ .../js/test/ir/IrJsCodegenBoxTestGenerated.java | 6 ++++++ .../test/ir/IrJsES6CodegenBoxTestGenerated.java | 6 ++++++ .../FirNativeCodegenBoxTestGenerated.java | 6 ++++++ .../FirNativeCodegenBoxTestNoPLGenerated.java | 6 ++++++ .../NativeCodegenBoxTestGenerated.java | 6 ++++++ .../NativeCodegenBoxTestNoPLGenerated.java | 6 ++++++ .../wasm/test/IrCodegenBoxWasmTestGenerated.java | 5 +++++ 17 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt 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 374c79d6175..c9635873bbe 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 @@ -16649,6 +16649,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/enum/enumEntriesFromJava.kt"); } + @Test + @TestMetadata("enumEntriesInCompanion.kt") + public void testEnumEntriesInCompanion() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); + } + @Test @TestMetadata("enumEntriesMultimodule.kt") public void testEnumEntriesMultimodule() throws Exception { 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 ddb55f14834..285e47a022c 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 @@ -16649,6 +16649,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/enum/enumEntriesFromJava.kt"); } + @Test + @TestMetadata("enumEntriesInCompanion.kt") + public void testEnumEntriesInCompanion() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); + } + @Test @TestMetadata("enumEntriesMultimodule.kt") public void testEnumEntriesMultimodule() throws Exception { diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/StaticInitializersLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/StaticInitializersLowering.kt index 30ed28f8dc6..2b4a663326c 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/StaticInitializersLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/StaticInitializersLowering.kt @@ -34,8 +34,9 @@ class StaticInitializersLowering(override val context: JvmBackendContext) : Init JvmLoweredDeclarationOrigin.GENERATED_PROPERTY_REFERENCE -> 1 IrDeclarationOrigin.FIELD_FOR_ENUM_ENTRY -> 2 IrDeclarationOrigin.FIELD_FOR_ENUM_VALUES -> 3 - IrDeclarationOrigin.FIELD_FOR_OBJECT_INSTANCE -> 4 - else -> 5 + IrDeclarationOrigin.FIELD_FOR_ENUM_ENTRIES -> 4 + IrDeclarationOrigin.FIELD_FOR_OBJECT_INSTANCE -> 5 + else -> 6 } } irClass.addFunction { diff --git a/compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt b/compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt new file mode 100644 index 00000000000..d2bed1e2c23 --- /dev/null +++ b/compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt @@ -0,0 +1,16 @@ +// !LANGUAGE: +EnumEntries +// IGNORE_BACKEND: JVM, JS +// WITH_STDLIB + +enum class MyEnum { + OK, NOPE; + + companion object { + @OptIn(ExperimentalStdlibApi::class) + val ok = entries[0] + } +} + +fun box(): String { + return MyEnum.ok.toString() +} \ 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 ac9d29c638d..52c56d7a392 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 @@ -16295,6 +16295,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesInCompanion.kt") + public void testEnumEntriesInCompanion() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); + } + @Test @TestMetadata("enumEntriesMultimoduleNoMappings.kt") public void testEnumEntriesMultimoduleNoMappings() 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 d0fd1017297..613bfa9e30c 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 @@ -16649,6 +16649,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/enum/enumEntriesFromJava.kt"); } + @Test + @TestMetadata("enumEntriesInCompanion.kt") + public void testEnumEntriesInCompanion() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); + } + @Test @TestMetadata("enumEntriesMultimodule.kt") public void testEnumEntriesMultimodule() throws Exception { 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 012c1fc689d..df3c0d1a309 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 @@ -16649,6 +16649,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/enum/enumEntriesFromJava.kt"); } + @Test + @TestMetadata("enumEntriesInCompanion.kt") + public void testEnumEntriesInCompanion() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); + } + @Test @TestMetadata("enumEntriesMultimodule.kt") public void testEnumEntriesMultimodule() 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 7d298fe53ca..22b9dbca199 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -13366,6 +13366,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @TestMetadata("enumEntriesInCompanion.kt") + public void ignoreEnumEntriesInCompanion() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); + } + @TestMetadata("enumEntriesMultimoduleNoMappings.kt") public void ignoreEnumEntriesMultimoduleNoMappings() throws Exception { runTest("compiler/testData/codegen/box/enum/enumEntriesMultimoduleNoMappings.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 e222af1a2c5..5f08f0e5fa0 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 @@ -12587,6 +12587,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesInCompanion.kt") + public void testEnumEntriesInCompanion() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); + } + @Test @TestMetadata("enumEntriesMultimoduleNoMappings.kt") public void testEnumEntriesMultimoduleNoMappings() throws Exception { 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 35c9546398d..13bf09f1f8a 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 @@ -12683,6 +12683,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest { runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesInCompanion.kt") + public void testEnumEntriesInCompanion() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); + } + @Test @TestMetadata("enumEntriesMultimoduleNoMappings.kt") public void testEnumEntriesMultimoduleNoMappings() 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 0dd390f35d2..afd5fb35d48 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 @@ -12683,6 +12683,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesInCompanion.kt") + public void testEnumEntriesInCompanion() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); + } + @Test @TestMetadata("enumEntriesMultimoduleNoMappings.kt") public void testEnumEntriesMultimoduleNoMappings() throws Exception { 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 290daa4e9c4..a85d3db03b7 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 @@ -12683,6 +12683,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesInCompanion.kt") + public void testEnumEntriesInCompanion() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); + } + @Test @TestMetadata("enumEntriesMultimoduleNoMappings.kt") public void testEnumEntriesMultimoduleNoMappings() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java index fba5d26e49f..92edee89ed1 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java @@ -13831,6 +13831,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesInCompanion.kt") + public void testEnumEntriesInCompanion() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); + } + @Test @TestMetadata("enumEntriesMultimoduleNoMappings.kt") public void testEnumEntriesMultimoduleNoMappings() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java index d0771a41541..0f04a39f89c 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java @@ -14155,6 +14155,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesInCompanion.kt") + public void testEnumEntriesInCompanion() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); + } + @Test @TestMetadata("enumEntriesMultimoduleNoMappings.kt") public void testEnumEntriesMultimoduleNoMappings() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java index afa83e81b5a..c7377d73b5e 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java @@ -13670,6 +13670,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesInCompanion.kt") + public void testEnumEntriesInCompanion() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); + } + @Test @TestMetadata("enumEntriesMultimoduleNoMappings.kt") public void testEnumEntriesMultimoduleNoMappings() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java index 4380bf4fe9a..e0746205eac 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java @@ -13832,6 +13832,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesInCompanion.kt") + public void testEnumEntriesInCompanion() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); + } + @Test @TestMetadata("enumEntriesMultimoduleNoMappings.kt") public void testEnumEntriesMultimoduleNoMappings() throws Exception { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java index 237ce51f6e4..f75347a3f71 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java @@ -11249,6 +11249,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @TestMetadata("enumEntriesInCompanion.kt") + public void testEnumEntriesInCompanion() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); + } + @TestMetadata("enumEntriesMultimoduleNoMappings.kt") public void testEnumEntriesMultimoduleNoMappings() throws Exception { runTest("compiler/testData/codegen/box/enum/enumEntriesMultimoduleNoMappings.kt");