From 06e77303a537c7448502c9418c4a30f88c7b41bc Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Wed, 11 Dec 2019 12:18:54 +0300 Subject: [PATCH] Make CBridgeGen symbol names more unique --- .../kotlin/backend/konan/lower/InteropLowering.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt index f0394aef758..ca90ad21813 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt @@ -48,6 +48,7 @@ import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe +import org.jetbrains.kotlin.resolve.descriptorUtil.module internal abstract class BaseInteropIrTransformer(private val context: Context) : IrBuildingTransformer(context) { @@ -61,6 +62,16 @@ internal abstract class BaseInteropIrTransformer(private val context: Context) : builder.getCompilerMessageLocation() } + val uniqueModuleName = irFile.packageFragmentDescriptor.module.name.asString() + .let { it.substring(1, it.lastIndex) } + val uniquePrefix = buildString { + append('_') + uniqueModuleName.toByteArray().joinTo(this, "") { + (0xFF and it.toInt()).toString(16).padStart(2, '0') + } + append('_') + } + return object : KotlinStubs { override val irBuiltIns get() = context.irBuiltIns override val symbols get() = context.ir.symbols @@ -74,7 +85,7 @@ internal abstract class BaseInteropIrTransformer(private val context: Context) : } override fun getUniqueCName(prefix: String) = - "_${context.cStubsManager.getUniqueName(prefix)}" // Ok in absence of separate compilation + "$uniquePrefix${context.cStubsManager.getUniqueName(prefix)}" override fun getUniqueKotlinFunctionReferenceClassName(prefix: String) = "$prefix${context.functionReferenceCount++}"