diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/AbstractClosureAnnotator.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/AbstractClosureAnnotator.kt index cfe1caeb193..dde301fa103 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/AbstractClosureAnnotator.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/AbstractClosureAnnotator.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.backend.common.lower import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.expressions.IrCatch import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression import org.jetbrains.kotlin.ir.expressions.IrValueAccessExpression import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid @@ -172,6 +173,11 @@ class ClosureAnnotator { super.visitVariable(declaration) } + override fun visitCatch(aCatch: IrCatch) { + closuresStack.peek()?.declareVariable(aCatch.parameter) + super.visitCatch(aCatch) + } + // Process delegating constructor calls, enum constructor calls, calls and callable references. override fun visitMemberAccess(expression: IrMemberAccessExpression) { expression.acceptChildrenVoid(this) diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 96d561ca356..04cbdb16b90 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -568,6 +568,11 @@ task localClass_localFunctionInLocalClass(type: RunKonanTest) { source = "codegen/localClass/localFunctionInLocalClass.kt" } +task localClass_tryCatch(type: RunKonanTest) { + goldValue = "" + source = "codegen/localClass/tryCatch.kt" +} + task function_localFunction(type : RunKonanTest) { goldValue = "OK\n" source = "codegen/function/localFunction.kt" diff --git a/backend.native/tests/codegen/localClass/tryCatch.kt b/backend.native/tests/codegen/localClass/tryCatch.kt new file mode 100644 index 00000000000..b75c2b0e403 --- /dev/null +++ b/backend.native/tests/codegen/localClass/tryCatch.kt @@ -0,0 +1,16 @@ +private fun foo() { + val local = + object { + fun bar() { + try { + } catch (t: Throwable) { + println(t) + } + } + } + local.bar() +} + +fun main(args: Array) { + foo() +} \ No newline at end of file