diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt index 59e2ac11430..9fdea88795a 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.backend.konan.serialization import org.jetbrains.kotlin.backend.konan.* import org.jetbrains.kotlin.backend.konan.descriptors.DeserializedKonanModule import org.jetbrains.kotlin.backend.konan.descriptors.createKonanModuleDescriptor +import org.jetbrains.kotlin.backend.konan.descriptors.isExpectMember import org.jetbrains.kotlin.backend.konan.library.KonanLibraryReader import org.jetbrains.kotlin.backend.konan.library.LinkData import org.jetbrains.kotlin.backend.konan.llvm.base64Decode @@ -206,12 +207,12 @@ internal class KonanSerializationUtil(val context: Context) { val classifierDescriptors = KonanDescriptorSerializer.sort( fragments.flatMap { it.getMemberScope().getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS) - } + }.filter { !it.isExpectMember } ) val members = fragments.flatMap { fragment -> DescriptorUtils.getAllDescriptors(fragment.getMemberScope()) - } + }.filter { !it.isExpectMember } val classesBuilder = KonanLinkData.Classes.newBuilder() diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 57667eaf3a5..3e21f5034e8 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -1959,6 +1959,13 @@ task mpp1(type: RunStandaloneKonanTest) { flags = ['-tr', '-Xmulti-platform'] } +task mpp2(type: LinkKonanTest) { + goldValue = "C(arg=42)\ntrue\n1\nh\n" + source = "codegen/mpp/mpp2.kt" + lib = "codegen/mpp/libmpp2.kt" + flags = ['-Xmulti-platform'] +} + task unit1(type: RunKonanTest) { goldValue = "First\nkotlin.Unit\n" source = "codegen/basics/unit1.kt" diff --git a/backend.native/tests/codegen/mpp/libmpp2.kt b/backend.native/tests/codegen/mpp/libmpp2.kt new file mode 100644 index 00000000000..ecaf8a42173 --- /dev/null +++ b/backend.native/tests/codegen/mpp/libmpp2.kt @@ -0,0 +1,16 @@ +expect class C { + constructor(arg: Any?) +} + +actual data class C actual constructor(val arg: Any?) { + +} + +expect class T +actual typealias T = C + +expect fun f(arg: Int): Int +actual fun f(arg: Int) = arg + +expect var p: String +actual var p: String = "p" diff --git a/backend.native/tests/codegen/mpp/mpp2.kt b/backend.native/tests/codegen/mpp/mpp2.kt new file mode 100644 index 00000000000..e47088913c3 --- /dev/null +++ b/backend.native/tests/codegen/mpp/mpp2.kt @@ -0,0 +1,8 @@ +fun main(args: Array) { + println(C(42)) + println(C(42) is T) + println(f(1)) + + p = "h" + println(p) +}