diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryInterface.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryInterface.kt index ec671790ad4..fa96c5b8248 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryInterface.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryInterface.kt @@ -160,7 +160,7 @@ private val FunctionDescriptor.signature: String when { this.typeParameters.isNotEmpty() -> "Generic" returnType.let { it != null && it.isValueType() } -> "ValueType" - returnType.let { it != null && !KotlinBuiltIns.isUnitOrNullableUnit(it) } -> "Reference" + returnType.let { it != null && !KotlinBuiltIns.isUnitOrNullableUnit(it) } -> typeToHashString(returnType!!) else -> "" } diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 3b310e10124..57667eaf3a5 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -907,6 +907,10 @@ task bridges_special(type: RunKonanTest) { source = "codegen/bridges/special.kt" } +task returnTypeSignature(type: RunKonanTest) { + source = "codegen/bridges/returnTypeSignature.kt" +} + task classDelegation_method(type: RunKonanTest) { goldValue = "OKOK\n" source = "codegen/classDelegation/method.kt" diff --git a/backend.native/tests/codegen/bridges/returnTypeSignature.kt b/backend.native/tests/codegen/bridges/returnTypeSignature.kt new file mode 100644 index 00000000000..30d4b3ae0d7 --- /dev/null +++ b/backend.native/tests/codegen/bridges/returnTypeSignature.kt @@ -0,0 +1,29 @@ +package codegen.bridges.signature + +import kotlin.test.* + +class A { } + +class B { } + +class C { } + +interface Parser { + fun parse(source: IN): OUT +} + +interface MultiParser { + fun parse(source: IN): Collection +} + +interface ExtendsInterface: Parser, MultiParser { + override fun parse(source: B): Collection = ArrayList() +} + +abstract class AbstractClass(): ExtendsInterface { + public override fun parse(source: A): C = C() +} + +@Test fun runTest() { + val array = object : AbstractClass() { }.parse(B()) +} \ No newline at end of file