From eabf6dac7f17c4da36394e069366d3335eccba79 Mon Sep 17 00:00:00 2001 From: Vladimir Sukharev Date: Fri, 3 Jun 2022 07:40:26 +0000 Subject: [PATCH] Fix "kotlin.TypeCastException has no message on Native" #KT-35544 Fixed Merge-request: KT-MR-6392 Merged-by: Vladimir Sukharev --- .../jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt | 3 ++- .../backend.native/tests/interop/objc/tests/kt35544.kt | 9 +++++++++ .../main/kotlin/kotlin/native/internal/RuntimeUtils.kt | 4 ++-- 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 kotlin-native/backend.native/tests/interop/objc/tests/kt35544.kt diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt index 644e451077f..80bd0a417a3 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt @@ -1556,9 +1556,10 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map { + 123 as NSString + } + assertEquals("class kotlin.Int cannot be cast to class objcTests.NSString", exception.message) +} diff --git a/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/RuntimeUtils.kt b/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/RuntimeUtils.kt index 175d4ce53f3..a69ad4fb9a3 100644 --- a/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/RuntimeUtils.kt +++ b/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/RuntimeUtils.kt @@ -32,8 +32,8 @@ fun ThrowClassCastException(instance: Any, typeInfo: NativePtr): Nothing { } @ExportForCppRuntime -fun ThrowTypeCastException(): Nothing { - throw TypeCastException() +fun ThrowTypeCastException(instance: Any, typeName: String): Nothing { + throw TypeCastException("${instance::class} cannot be cast to class $typeName") } @ExportForCppRuntime