From a7e2e4622c214c6fdbb5fbbe00a5aeb03916b084 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Mon, 24 Jun 2019 19:51:25 +0300 Subject: [PATCH] Fixed a couple of bugs with duplicate IR --- .../kotlin/backend/konan/cgen/CBridgeGen.kt | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt index 98aaedb3563..bb04c435e5b 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt @@ -297,19 +297,19 @@ internal fun KotlinStubs.generateObjCCall( superQualifier: IrClassSymbol?, receiver: IrExpression, arguments: List -): IrExpression { +) = builder.irBlock { + val callBuilder = KotlinToCCallBuilder(builder, this@generateObjCCall, isObjCMethod = true) - val callBuilder = KotlinToCCallBuilder(builder, this, isObjCMethod = true) + val superClass = irTemporaryVar( + superQualifier?.let { getObjCClass(symbols, it) } ?: irNullNativePtr(symbols) + ) - val superClass = superQualifier?.let { builder.getObjCClass(symbols, it) } - ?: builder.irNullNativePtr(symbols) - - val messenger = builder.irCall(if (isStret) { + val messenger = irCall(if (isStret) { symbols.interopGetMessengerStret } else { symbols.interopGetMessenger }.owner).apply { - putValueArgument(0, superClass) // TODO: check superClass statically. + putValueArgument(0, irGet(superClass)) // TODO: check superClass statically. } val targetPtrParameter = callBuilder.passThroughBridge( @@ -320,7 +320,7 @@ internal fun KotlinStubs.generateObjCCall( val targetFunctionName = "targetPtr" val preparedReceiver = if (method.consumesReceiver()) { - builder.irCall(symbols.interopObjCRetain.owner).apply { + irCall(symbols.interopObjCRetain.owner).apply { putValueArgument(0, receiver) } } else { @@ -328,9 +328,9 @@ internal fun KotlinStubs.generateObjCCall( } val receiverOrSuper = if (superQualifier != null) { - builder.irCall(symbols.interopCreateObjCSuperStruct.owner).apply { + irCall(symbols.interopCreateObjCSuperStruct.owner).apply { putValueArgument(0, preparedReceiver) - putValueArgument(1, superClass) + putValueArgument(1, irGet(superClass)) } } else { preparedReceiver @@ -355,7 +355,7 @@ internal fun KotlinStubs.generateObjCCall( callBuilder.emitCBridge() - return result + +result } private fun IrBuilderWithScope.getObjCClass(symbols: KonanSymbols, symbol: IrClassSymbol): IrExpression { @@ -1168,7 +1168,6 @@ private class ObjCBlockPointerValuePassing( Name.identifier("blockHolder"), isMutable = false, owner = irClass ) - irClass.addChild(blockHolderField) val constructorDescriptor = WrappedClassConstructorDescriptor() val constructor = IrConstructorImpl(