From d6867917c96c37d49bbda2c3cdf855d7d747992e Mon Sep 17 00:00:00 2001 From: Abduqodiri Qurbonzoda Date: Sun, 11 Jun 2023 03:14:57 +0300 Subject: [PATCH] Enum entry hashCode() should return identity hash code #KT-59223 --- .../codegen/FirLightTreeBlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/FirPsiBlackBoxCodegenTestGenerated.java | 6 ++++++ compiler/testData/codegen/box/enum/enumEntryHashCode.kt | 8 ++++++++ .../runners/codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../runners/codegen/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ .../IrBlackBoxCodegenWithIrInlinerTestGenerated.java | 6 ++++++ .../kotlin/codegen/LightAnalysisModeTestGenerated.java | 5 +++++ .../kotlin/js/test/JsCodegenBoxTestGenerated.java | 6 ++++++ .../kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java | 6 ++++++ .../kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java | 6 ++++++ .../kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java | 6 ++++++ kotlin-native/runtime/src/main/kotlin/kotlin/Enum.kt | 4 ---- .../blackboxtest/FirNativeCodegenBoxTestGenerated.java | 6 ++++++ .../FirNativeCodegenBoxTestNoPLGenerated.java | 6 ++++++ .../konan/blackboxtest/NativeCodegenBoxTestGenerated.java | 6 ++++++ .../blackboxtest/NativeCodegenBoxTestNoPLGenerated.java | 6 ++++++ .../kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java | 5 +++++ 17 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 compiler/testData/codegen/box/enum/enumEntryHashCode.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 7fc46b1771d..7156a4f3b20 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 @@ -16715,6 +16715,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/enum/enumEntriesNameClashes.kt"); } + @Test + @TestMetadata("enumEntryHashCode.kt") + public void testEnumEntryHashCode() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntryHashCode.kt"); + } + @Test @TestMetadata("enumEntryMembers.kt") public void testEnumEntryMembers() 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 c2ff7ce44b4..051e52fdfae 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 @@ -16715,6 +16715,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/enum/enumEntriesNameClashes.kt"); } + @Test + @TestMetadata("enumEntryHashCode.kt") + public void testEnumEntryHashCode() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntryHashCode.kt"); + } + @Test @TestMetadata("enumEntryMembers.kt") public void testEnumEntryMembers() throws Exception { diff --git a/compiler/testData/codegen/box/enum/enumEntryHashCode.kt b/compiler/testData/codegen/box/enum/enumEntryHashCode.kt new file mode 100644 index 00000000000..172e994aabb --- /dev/null +++ b/compiler/testData/codegen/box/enum/enumEntryHashCode.kt @@ -0,0 +1,8 @@ +// WITH_STDLIB + +enum class E { + A, B +} + +// hashCode shouldn't always return ordinal: KT-59223 +fun box() = if (E.A.hashCode() == E.A.ordinal && E.B.hashCode() == E.B.ordinal) "FAIL" else "OK" \ 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 e67492048d2..93411313eb9 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 @@ -16343,6 +16343,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/enum/enumEntriesNameClashes.kt"); } + @Test + @TestMetadata("enumEntryHashCode.kt") + public void testEnumEntryHashCode() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntryHashCode.kt"); + } + @Test @TestMetadata("enumEntryMembers.kt") public void testEnumEntryMembers() 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 5c9442472b4..e44f568f1dc 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 @@ -16715,6 +16715,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/enum/enumEntriesNameClashes.kt"); } + @Test + @TestMetadata("enumEntryHashCode.kt") + public void testEnumEntryHashCode() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntryHashCode.kt"); + } + @Test @TestMetadata("enumEntryMembers.kt") public void testEnumEntryMembers() 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 c370d529c31..8746a538d98 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 @@ -16715,6 +16715,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/enum/enumEntriesNameClashes.kt"); } + @Test + @TestMetadata("enumEntryHashCode.kt") + public void testEnumEntryHashCode() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntryHashCode.kt"); + } + @Test @TestMetadata("enumEntryMembers.kt") public void testEnumEntryMembers() 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 e29ed009274..8318dd7ddb9 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -13504,6 +13504,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/enum/enumConstructorParameterClashWithDefaults.kt"); } + @TestMetadata("enumEntryHashCode.kt") + public void testEnumEntryHashCode() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntryHashCode.kt"); + } + @TestMetadata("enumEntryMembers.kt") public void testEnumEntryMembers() throws Exception { runTest("compiler/testData/codegen/box/enum/enumEntryMembers.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 b74598ca1df..6aec8f95674 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 @@ -12629,6 +12629,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/enum/enumEntriesNameClashes.kt"); } + @Test + @TestMetadata("enumEntryHashCode.kt") + public void testEnumEntryHashCode() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntryHashCode.kt"); + } + @Test @TestMetadata("enumEntryMembers.kt") public void testEnumEntryMembers() 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 62f32fb4d32..a38f4d32b13 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 @@ -12731,6 +12731,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest { runTest("compiler/testData/codegen/box/enum/enumEntriesNameClashes.kt"); } + @Test + @TestMetadata("enumEntryHashCode.kt") + public void testEnumEntryHashCode() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntryHashCode.kt"); + } + @Test @TestMetadata("enumEntryMembers.kt") public void testEnumEntryMembers() 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 4156225c41f..b9f0ec84f47 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 @@ -12731,6 +12731,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/enum/enumEntriesNameClashes.kt"); } + @Test + @TestMetadata("enumEntryHashCode.kt") + public void testEnumEntryHashCode() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntryHashCode.kt"); + } + @Test @TestMetadata("enumEntryMembers.kt") public void testEnumEntryMembers() 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 ce8c2008429..6fb2342b7eb 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 @@ -12731,6 +12731,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes runTest("compiler/testData/codegen/box/enum/enumEntriesNameClashes.kt"); } + @Test + @TestMetadata("enumEntryHashCode.kt") + public void testEnumEntryHashCode() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntryHashCode.kt"); + } + @Test @TestMetadata("enumEntryMembers.kt") public void testEnumEntryMembers() throws Exception { diff --git a/kotlin-native/runtime/src/main/kotlin/kotlin/Enum.kt b/kotlin-native/runtime/src/main/kotlin/kotlin/Enum.kt index 10ab5ffdde7..f3c5bbc8b4f 100644 --- a/kotlin-native/runtime/src/main/kotlin/kotlin/Enum.kt +++ b/kotlin-native/runtime/src/main/kotlin/kotlin/Enum.kt @@ -24,10 +24,6 @@ public abstract class Enum>(@kotlin.internal.IntrinsicConstEvaluation return this === other } - public override final fun hashCode(): Int { - return ordinal - } - public override fun toString(): String { return name } 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 d3505da7027..a68f8c59a57 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 @@ -13873,6 +13873,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe runTest("compiler/testData/codegen/box/enum/enumEntriesNameClashes.kt"); } + @Test + @TestMetadata("enumEntryHashCode.kt") + public void testEnumEntryHashCode() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntryHashCode.kt"); + } + @Test @TestMetadata("enumEntryMembers.kt") public void testEnumEntryMembers() 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 f08bac99513..8b2405f4a34 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 @@ -14197,6 +14197,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB runTest("compiler/testData/codegen/box/enum/enumEntriesNameClashes.kt"); } + @Test + @TestMetadata("enumEntryHashCode.kt") + public void testEnumEntryHashCode() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntryHashCode.kt"); + } + @Test @TestMetadata("enumEntryMembers.kt") public void testEnumEntryMembers() 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 6ea13e316a2..f99d457a147 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 @@ -13712,6 +13712,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest runTest("compiler/testData/codegen/box/enum/enumEntriesNameClashes.kt"); } + @Test + @TestMetadata("enumEntryHashCode.kt") + public void testEnumEntryHashCode() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntryHashCode.kt"); + } + @Test @TestMetadata("enumEntryMembers.kt") public void testEnumEntryMembers() 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 065a962fef3..78ec20566c7 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 @@ -13874,6 +13874,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT runTest("compiler/testData/codegen/box/enum/enumEntriesNameClashes.kt"); } + @Test + @TestMetadata("enumEntryHashCode.kt") + public void testEnumEntryHashCode() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntryHashCode.kt"); + } + @Test @TestMetadata("enumEntryMembers.kt") public void testEnumEntryMembers() 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 9774b27b52b..aa680bb8ca0 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 @@ -11289,6 +11289,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/enum/enumEntriesNameClashes.kt"); } + @TestMetadata("enumEntryHashCode.kt") + public void testEnumEntryHashCode() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntryHashCode.kt"); + } + @TestMetadata("enumEntryMembers.kt") public void testEnumEntryMembers() throws Exception { runTest("compiler/testData/codegen/box/enum/enumEntryMembers.kt");