From 7fd033adaeaeff95ceec5b8892475cc8d28b2955 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Fri, 4 Jun 2021 15:11:39 +0300 Subject: [PATCH] JVM_IR KT-47073 use type parameter upper bound for default value --- .../codegen/FirBlackBoxCodegenTestGenerated.java | 12 ++++++++++++ .../org/jetbrains/kotlin/backend/jvm/ir/IrUtils.kt | 6 ++++++ .../testData/codegen/box/defaultArguments/kt47073.kt | 9 +++++++++ .../codegen/box/defaultArguments/kt47073_nested.kt | 12 ++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 12 ++++++++++++ .../codegen/IrBlackBoxCodegenTestGenerated.java | 12 ++++++++++++ .../codegen/LightAnalysisModeTestGenerated.java | 10 ++++++++++ .../semantics/IrJsCodegenBoxES6TestGenerated.java | 10 ++++++++++ .../ir/semantics/IrJsCodegenBoxTestGenerated.java | 10 ++++++++++ .../js/test/semantics/JsCodegenBoxTestGenerated.java | 10 ++++++++++ .../semantics/IrCodegenBoxWasmTestGenerated.java | 10 ++++++++++ 11 files changed, 113 insertions(+) create mode 100644 compiler/testData/codegen/box/defaultArguments/kt47073.kt create mode 100644 compiler/testData/codegen/box/defaultArguments/kt47073_nested.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 39e8b3a49c2..1503489ad07 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 @@ -12550,6 +12550,18 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/defaultArguments/kt46189.kt"); } + @Test + @TestMetadata("kt47073.kt") + public void testKt47073() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073.kt"); + } + + @Test + @TestMetadata("kt47073_nested.kt") + public void testKt47073_nested() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073_nested.kt"); + } + @Test @TestMetadata("kt6382.kt") public void testKt6382() throws Exception { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrUtils.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrUtils.kt index 3a2f20d215a..da8e6636c7e 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrUtils.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrUtils.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin import org.jetbrains.kotlin.backend.jvm.JvmSymbols import org.jetbrains.kotlin.backend.jvm.codegen.isInlineOnly import org.jetbrains.kotlin.backend.jvm.codegen.isJvmInterface +import org.jetbrains.kotlin.backend.jvm.codegen.representativeUpperBound import org.jetbrains.kotlin.backend.jvm.lower.inlineclasses.unboxInlineClass import org.jetbrains.kotlin.codegen.inline.coroutines.FOR_INLINE_SUFFIX import org.jetbrains.kotlin.config.JvmDefaultMode @@ -123,6 +124,11 @@ val IrType.erasedUpperBound: IrClass * the value is not reboxed and reunboxed by the codegen by using the unsafeCoerceIntrinsic. */ fun IrType.defaultValue(startOffset: Int, endOffset: Int, context: JvmBackendContext): IrExpression { + val classifier = this.classifierOrNull + if (classifier is IrTypeParameterSymbol) { + return classifier.owner.representativeUpperBound.defaultValue(startOffset, endOffset, context) + } + if (this !is IrSimpleType || hasQuestionMark || classOrNull?.owner?.isInline != true) return IrConstImpl.defaultValueForType(startOffset, endOffset, this) diff --git a/compiler/testData/codegen/box/defaultArguments/kt47073.kt b/compiler/testData/codegen/box/defaultArguments/kt47073.kt new file mode 100644 index 00000000000..b9c300f3654 --- /dev/null +++ b/compiler/testData/codegen/box/defaultArguments/kt47073.kt @@ -0,0 +1,9 @@ +// IGNORE_BACKEND: JS + +class Test(val k: T) { + fun test(x: T = k): String { + return "O$x" + } +} + +fun box() = Test('K').test() diff --git a/compiler/testData/codegen/box/defaultArguments/kt47073_nested.kt b/compiler/testData/codegen/box/defaultArguments/kt47073_nested.kt new file mode 100644 index 00000000000..0b21d90d08d --- /dev/null +++ b/compiler/testData/codegen/box/defaultArguments/kt47073_nested.kt @@ -0,0 +1,12 @@ +// IGNORE_BACKEND: JS + +class Test(val k: T) { + fun test(): String { + fun nested(x: T = k): String { + return "O$x" + } + return nested() + } +} + +fun box() = Test('K').test() 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 4ce738cd9e8..2fccc5e932c 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 @@ -12550,6 +12550,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/defaultArguments/kt46189.kt"); } + @Test + @TestMetadata("kt47073.kt") + public void testKt47073() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073.kt"); + } + + @Test + @TestMetadata("kt47073_nested.kt") + public void testKt47073_nested() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073_nested.kt"); + } + @Test @TestMetadata("kt6382.kt") public void testKt6382() 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 18f0411c992..bb079dcc8b0 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 @@ -12550,6 +12550,18 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/defaultArguments/kt46189.kt"); } + @Test + @TestMetadata("kt47073.kt") + public void testKt47073() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073.kt"); + } + + @Test + @TestMetadata("kt47073_nested.kt") + public void testKt47073_nested() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073_nested.kt"); + } + @Test @TestMetadata("kt6382.kt") public void testKt6382() 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 7337fd6669b..d74cdb1c8f9 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -10149,6 +10149,16 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/defaultArguments/kt46189.kt"); } + @TestMetadata("kt47073.kt") + public void testKt47073() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073.kt"); + } + + @TestMetadata("kt47073_nested.kt") + public void testKt47073_nested() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073_nested.kt"); + } + @TestMetadata("kt6382.kt") public void testKt6382() throws Exception { runTest("compiler/testData/codegen/box/defaultArguments/kt6382.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 58a5fdd0e27..844600d920e 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 @@ -9028,6 +9028,16 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/defaultArguments/kt46189.kt"); } + @TestMetadata("kt47073.kt") + public void testKt47073() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073.kt"); + } + + @TestMetadata("kt47073_nested.kt") + public void testKt47073_nested() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073_nested.kt"); + } + @TestMetadata("kt6382.kt") public void testKt6382() throws Exception { runTest("compiler/testData/codegen/box/defaultArguments/kt6382.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 a63f5bd3318..eb584dafa71 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 @@ -8434,6 +8434,16 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/defaultArguments/kt46189.kt"); } + @TestMetadata("kt47073.kt") + public void testKt47073() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073.kt"); + } + + @TestMetadata("kt47073_nested.kt") + public void testKt47073_nested() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073_nested.kt"); + } + @TestMetadata("kt6382.kt") public void testKt6382() throws Exception { runTest("compiler/testData/codegen/box/defaultArguments/kt6382.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 27bc87d8835..1fb8cea833a 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 @@ -8434,6 +8434,16 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/defaultArguments/kt46189.kt"); } + @TestMetadata("kt47073.kt") + public void testKt47073() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073.kt"); + } + + @TestMetadata("kt47073_nested.kt") + public void testKt47073_nested() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073_nested.kt"); + } + @TestMetadata("kt6382.kt") public void testKt6382() throws Exception { runTest("compiler/testData/codegen/box/defaultArguments/kt6382.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 ccdedefbdc5..ae63802098e 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 @@ -3989,6 +3989,16 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/defaultArguments/kt46189.kt"); } + @TestMetadata("kt47073.kt") + public void testKt47073() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073.kt"); + } + + @TestMetadata("kt47073_nested.kt") + public void testKt47073_nested() throws Exception { + runTest("compiler/testData/codegen/box/defaultArguments/kt47073_nested.kt"); + } + @TestMetadata("kt6382.kt") public void testKt6382() throws Exception { runTest("compiler/testData/codegen/box/defaultArguments/kt6382.kt");