From b79301d57271cdb44aba8dff5159fc78e46046fa Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Tue, 14 Aug 2018 18:32:04 +0300 Subject: [PATCH] Fix for #1880 --- .../kotlin/backend/konan/lower/PostInlineLowering.kt | 5 ++++- backend.native/tests/build.gradle | 5 +++++ .../tests/lower/immutable_binary_blob_in_lambda.kt | 9 +++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 backend.native/tests/lower/immutable_binary_blob_in_lambda.kt diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PostInlineLowering.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PostInlineLowering.kt index 219d958f758..1d51cd0acce 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PostInlineLowering.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PostInlineLowering.kt @@ -74,7 +74,10 @@ internal class PostInlineLowering(val context: Context) : FileLoweringPass { override fun visitCall(expression: IrCall): IrExpression { expression.transformChildrenVoid(this) - if (expression.symbol == context.ir.symbols.immutableBinaryBlobOf) { + // Function inlining is changing function symbol at callsite + // and unbound symbol replacement is happening later. + // So we compare descriptors for now. + if (expression.descriptor == context.immutableBinaryBlobOf) { // Convert arguments of the binary blob to special IrConst structure, so that // vararg lowering will not affect it. val args = expression.getValueArgument(0) as? IrVararg diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index a9e89e5f5fa..149c0453560 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -1462,6 +1462,11 @@ task if_else(type: RunKonanTest) { source = "codegen/branching/if_else.kt" } +task immutable_binary_blob_in_lambda(type: RunKonanTest) { + source = "lower/immutable_binary_blob_in_lambda.kt" + goldValue = "123\n" +} + task when2(type: RunKonanTest) { source = "codegen/branching/when2.kt" } diff --git a/backend.native/tests/lower/immutable_binary_blob_in_lambda.kt b/backend.native/tests/lower/immutable_binary_blob_in_lambda.kt new file mode 100644 index 00000000000..5baf3dd780d --- /dev/null +++ b/backend.native/tests/lower/immutable_binary_blob_in_lambda.kt @@ -0,0 +1,9 @@ +package lower.immutable_binary_blob_in_lambda + +import kotlin.test.* + +@Test +fun runTest() = run { + val golden = immutableBinaryBlobOf(123) + println(golden[0]) +} \ No newline at end of file