From c21820c615bcf45a538fa7d939e22018627a4034 Mon Sep 17 00:00:00 2001 From: Ilmir Usmanov Date: Tue, 23 Jun 2020 22:11:28 +0200 Subject: [PATCH] Revert "Revert "Fix merging two reference values"" This reverts commit 1cccceabb98215803c1610a46ee0d035e7f89403. --- .../SpilledVariableFieldTypesAnalysis.kt | 11 +++--- .../ir/FirBlackBoxCodegenTestGenerated.java | 5 +++ .../listThrowablePairInOneSlot.kt | 34 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 5 +++ .../LightAnalysisModeTestGenerated.java | 5 +++ .../ir/IrBlackBoxCodegenTestGenerated.java | 5 +++ .../IrJsCodegenBoxES6TestGenerated.java | 5 +++ .../IrJsCodegenBoxTestGenerated.java | 5 +++ .../semantics/JsCodegenBoxTestGenerated.java | 5 +++ 9 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 compiler/testData/codegen/box/coroutines/intLikeVarSpilling/listThrowablePairInOneSlot.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/SpilledVariableFieldTypesAnalysis.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/SpilledVariableFieldTypesAnalysis.kt index 94ab962bd94..3e6f6a66b15 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/SpilledVariableFieldTypesAnalysis.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/SpilledVariableFieldTypesAnalysis.kt @@ -37,10 +37,6 @@ internal open class SpilledVariableFieldTypeValue(open var type: Type?, val insn private class MergedSpilledVariableFieldTypeValue( val values: Set ) : SpilledVariableFieldTypeValue(null, null) { - init { - require(values.none { it is MergedSpilledVariableFieldTypeValue }) - } - override var type: Type? get() = values.first().type set(newType) { @@ -159,6 +155,13 @@ private class SpilledVariableFieldTypesInterpreter( v != null && v.type == null -> w w != null && w.type == null -> v v?.type == w?.type -> v + v?.type?.sort == Type.OBJECT && w?.type?.sort == Type.OBJECT -> { + when { + v.type == AsmTypes.OBJECT_TYPE -> v + w.type == AsmTypes.OBJECT_TYPE -> w + else -> SpilledVariableFieldTypeValue(AsmTypes.OBJECT_TYPE, v.insn) + } + } else -> SpilledVariableFieldTypeValue(null, v?.insn ?: w?.insn) } diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index de19e23e62a..34f126eaad7 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -7495,6 +7495,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/i2bResult.kt", "kotlin.coroutines"); } + @TestMetadata("listThrowablePairInOneSlot.kt") + public void testListThrowablePairInOneSlot() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/listThrowablePairInOneSlot.kt"); + } + @TestMetadata("loadFromBooleanArray.kt") public void testLoadFromBooleanArray_1_3() throws Exception { runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/loadFromBooleanArray.kt", "kotlin.coroutines"); diff --git a/compiler/testData/codegen/box/coroutines/intLikeVarSpilling/listThrowablePairInOneSlot.kt b/compiler/testData/codegen/box/coroutines/intLikeVarSpilling/listThrowablePairInOneSlot.kt new file mode 100644 index 00000000000..9e6853a32a7 --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/intLikeVarSpilling/listThrowablePairInOneSlot.kt @@ -0,0 +1,34 @@ +// WITH_RUNTIME +// WITH_COROUTINES +// FULL_RUNTIME +// KJS_WITH_FULL_RUNTIME + +class JarFile { + fun entries() = listOf() +} + +private fun scriptTemplatesDiscoverySequence(): Sequence { + return sequence { + for (dep in listOf()) { + try { + val jar = JarFile() + try { + jar.entries().map { it } + val (loadedDefinitions, notFoundClasses) = listOf() to listOf() + listOf().forEach { + yield(it) + } + } catch (e: Throwable) { + e.message + } + } catch (e: Exception) { + e.message + } + } + yield("OK") + } +} + +fun box(): String { + return scriptTemplatesDiscoverySequence().first() +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 25b0db306c9..162d398c1dd 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -8300,6 +8300,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/i2bResult.kt", "kotlin.coroutines"); } + @TestMetadata("listThrowablePairInOneSlot.kt") + public void testListThrowablePairInOneSlot() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/listThrowablePairInOneSlot.kt"); + } + @TestMetadata("loadFromBooleanArray.kt") public void testLoadFromBooleanArray_1_2() throws Exception { runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/loadFromBooleanArray.kt", "kotlin.coroutines.experimental"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index cd1f4c6b7b0..3bb7fe65ed5 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -8300,6 +8300,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/i2bResult.kt", "kotlin.coroutines"); } + @TestMetadata("listThrowablePairInOneSlot.kt") + public void testListThrowablePairInOneSlot() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/listThrowablePairInOneSlot.kt"); + } + @TestMetadata("loadFromBooleanArray.kt") public void testLoadFromBooleanArray_1_2() throws Exception { runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/loadFromBooleanArray.kt", "kotlin.coroutines.experimental"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index dcba856ac1d..603c5073891 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -7495,6 +7495,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/i2bResult.kt", "kotlin.coroutines"); } + @TestMetadata("listThrowablePairInOneSlot.kt") + public void testListThrowablePairInOneSlot() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/listThrowablePairInOneSlot.kt"); + } + @TestMetadata("loadFromBooleanArray.kt") public void testLoadFromBooleanArray_1_3() throws Exception { runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/loadFromBooleanArray.kt", "kotlin.coroutines"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index 778496be1a6..32869dacc41 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -6390,6 +6390,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/i2bResult.kt", "kotlin.coroutines"); } + @TestMetadata("listThrowablePairInOneSlot.kt") + public void testListThrowablePairInOneSlot() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/listThrowablePairInOneSlot.kt"); + } + @TestMetadata("loadFromBooleanArray.kt") public void testLoadFromBooleanArray_1_3() throws Exception { runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/loadFromBooleanArray.kt", "kotlin.coroutines"); 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 47b4bb037a5..f3a9fc09301 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 @@ -6400,6 +6400,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/i2bResult.kt", "kotlin.coroutines"); } + @TestMetadata("listThrowablePairInOneSlot.kt") + public void testListThrowablePairInOneSlot() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/listThrowablePairInOneSlot.kt"); + } + @TestMetadata("loadFromBooleanArray.kt") public void testLoadFromBooleanArray_1_3() throws Exception { runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/loadFromBooleanArray.kt", "kotlin.coroutines"); 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 7f60ba0a58a..a58d161ffd5 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 @@ -6400,6 +6400,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/i2bResult.kt", "kotlin.coroutines"); } + @TestMetadata("listThrowablePairInOneSlot.kt") + public void testListThrowablePairInOneSlot() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/listThrowablePairInOneSlot.kt"); + } + @TestMetadata("loadFromBooleanArray.kt") public void testLoadFromBooleanArray_1_3() throws Exception { runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/intLikeVarSpilling/loadFromBooleanArray.kt", "kotlin.coroutines");