diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java index 16f986142d2..bc8005b5319 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java @@ -405,11 +405,12 @@ public abstract class StackValue { coerce(unboxedType, toType, v); } else { - if (toType.getSort() == Type.BOOLEAN || toType.getSort() == Type.CHAR) { + Type numberType = getType(Number.class); + if (toType.getSort() == Type.BOOLEAN || (toType.getSort() == Type.CHAR && !numberType.equals(fromType))) { coerce(fromType, boxType(toType), v); } else { - coerce(fromType, getType(Number.class), v); + coerce(fromType, numberType, v); } unbox(toType, v); } diff --git a/compiler/testData/codegen/box/primitiveTypes/kt14868.kt b/compiler/testData/codegen/box/primitiveTypes/kt14868.kt new file mode 100644 index 00000000000..1416af7135b --- /dev/null +++ b/compiler/testData/codegen/box/primitiveTypes/kt14868.kt @@ -0,0 +1,6 @@ + +fun box(): String { + val x: Number = 75 + + return "O" + x.toChar() +} \ No newline at end of file diff --git a/compiler/testData/codegen/light-analysis/primitiveTypes/kt14868.txt b/compiler/testData/codegen/light-analysis/primitiveTypes/kt14868.txt new file mode 100644 index 00000000000..4e54db8d4c7 --- /dev/null +++ b/compiler/testData/codegen/light-analysis/primitiveTypes/kt14868.txt @@ -0,0 +1,3 @@ +public final class Kt14868Kt { + public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String +} diff --git a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 28eb1bada6a..06867f47d3f 100644 --- a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -10958,6 +10958,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes doTest(fileName); } + @TestMetadata("kt14868.kt") + public void testKt14868() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/primitiveTypes/kt14868.kt"); + doTest(fileName); + } + @TestMetadata("kt1508.kt") public void testKt1508() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/primitiveTypes/kt1508.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 64ade5a7f69..8de943bf2da 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -10958,6 +10958,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("kt14868.kt") + public void testKt14868() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/primitiveTypes/kt14868.kt"); + doTest(fileName); + } + @TestMetadata("kt1508.kt") public void testKt1508() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/primitiveTypes/kt1508.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeCodegenTestGenerated.java index d364fb300db..b246b52e6c7 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeCodegenTestGenerated.java @@ -10958,6 +10958,12 @@ public class LightAnalysisModeCodegenTestGenerated extends AbstractLightAnalysis doTest(fileName); } + @TestMetadata("kt14868.kt") + public void testKt14868() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/primitiveTypes/kt14868.kt"); + doTest(fileName); + } + @TestMetadata("kt1508.kt") public void testKt1508() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/primitiveTypes/kt1508.kt"); 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 c3e7c77e087..3e3d6f53fff 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 @@ -12849,6 +12849,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { doTest(fileName); } + @TestMetadata("kt14868.kt") + public void testKt14868() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/primitiveTypes/kt14868.kt"); + doTest(fileName); + } + @TestMetadata("kt1508.kt") public void testKt1508() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/primitiveTypes/kt1508.kt");