From d161108be34a8bb875e564a9d4d822d2ddb7bfaa Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Tue, 11 Jan 2022 19:15:44 +0300 Subject: [PATCH] ObjCExport: fix noAutorelease/testReceiveBlockFromSwiftAndCall The test expects to track block result lifetime in Swift, so we should add it to the tracker. Also fix the same problem for testReceiveBlockFromKotlinAndCall (which didn't fail because we added the block itself to the tracker). --- .../backend.native/tests/objcexport/noAutorelease.kt | 11 ++++++++++- .../tests/objcexport/noAutorelease.swift | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/kotlin-native/backend.native/tests/objcexport/noAutorelease.kt b/kotlin-native/backend.native/tests/objcexport/noAutorelease.kt index 20d4899ea40..4c091e34ee7 100644 --- a/kotlin-native/backend.native/tests/objcexport/noAutorelease.kt +++ b/kotlin-native/backend.native/tests/objcexport/noAutorelease.kt @@ -54,7 +54,7 @@ class NoAutoreleaseKotlinReceiveHelper(val kotlinLivenessTracker: KotlinLiveness private val list = listOf(Any()) private val string = Any().toString() private val number = createKotlinNumber() - private val block = createLambda() + private val block = createLambda(kotlinLivenessTracker) override fun receiveKotlinObject(): KotlinObject = kotlinObject.also { kotlinLivenessTracker.add(it) } override fun receiveSwiftObject(): Any = swiftObject.also { kotlinLivenessTracker.add(it) } @@ -158,4 +158,13 @@ private fun createLambda(): () -> KotlinObject { return { lambdaResult } // make it capturing thus dynamic. } +private fun createLambda(kotlinLivenessTracker: KotlinLivenessTracker): () -> KotlinObject { + val lambdaResult = KotlinObject() + return { + val result = lambdaResult // make it capturing thus dynamic. + kotlinLivenessTracker.add(result) + result + } +} + private fun createKotlinNumber(): Any = (0.5 + Any().hashCode().toDouble()) // to make it dynamic. diff --git a/kotlin-native/backend.native/tests/objcexport/noAutorelease.swift b/kotlin-native/backend.native/tests/objcexport/noAutorelease.swift index 60c512ba21b..65240812a0c 100644 --- a/kotlin-native/backend.native/tests/objcexport/noAutorelease.swift +++ b/kotlin-native/backend.native/tests/objcexport/noAutorelease.swift @@ -62,7 +62,7 @@ private class NoAutoreleaseSwiftHelper : NoAutoreleaseSendHelper, NoAutoreleaseR let list = createList() let string = createString() let number = createNumber() - let block = createBlock() + lazy var block = createBlock(swiftLivenessTracker: swiftLivenessTracker) func receiveKotlinObject() -> KotlinObject { let result = kotlinObject @@ -401,6 +401,15 @@ private func createBlock() -> () -> KotlinObject { return { return blockResult } // Make capturing thus dynamic. } +private func createBlock(swiftLivenessTracker: SwiftLivenessTracker) -> () -> KotlinObject { + let blockResult = KotlinObject() + return { + let result = blockResult // Make capturing thus dynamic. + swiftLivenessTracker.add(result) + return result + } +} + private func createString() -> String { return NSObject().description // Make it dynamic. }