From b6b447c0d5c7e32c8b1ea155e0a5ee09897fb13a Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Mon, 2 Dec 2019 15:29:18 +0700 Subject: [PATCH] [Interop][Metadata] Mark UniqId as public Public declaration's UniqId should have MSB == 1. Despite we using our own mangling scheme we still need to respect this convention. Otherwise IrLinker will go crazy searching for missing local declaration. --- .../kotlin/native/interop/gen/StubIrUniqIdProvider.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrUniqIdProvider.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrUniqIdProvider.kt index 0e7131e2af8..28de1596504 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrUniqIdProvider.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrUniqIdProvider.kt @@ -51,5 +51,11 @@ internal class StubIrUniqIdProvider { ?: error("Unexpected origin ${typeAlias.origin} for typealias ${typeAlias.alias.fqName}.") }.toUniqId() - private fun String.toUniqId() = UniqId(cityHash64()) + /** + * MSB should be set to 1 for public declarations. + * @see org.jetbrains.kotlin.ir.util.UniqId + */ + private fun Long.markAsPublic() = this or (1L shl 63) + + private fun String.toUniqId() = UniqId(cityHash64().markAsPublic()) } \ No newline at end of file