diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt index 8cb631c3de6..265d18256b1 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt @@ -58,7 +58,7 @@ class CoroutineCodegen( override fun generateClosureBody() { v.newField( - JvmDeclarationOrigin.NO_ORIGIN, Opcodes.ACC_PRIVATE or Opcodes.ACC_VOLATILE, + JvmDeclarationOrigin.NO_ORIGIN, AsmUtil.NO_FLAG_PACKAGE_PRIVATE or Opcodes.ACC_VOLATILE, COROUTINE_CONTROLLER_FIELD_NAME, typeMapper.mapType(controllerType).descriptor, null, null) diff --git a/compiler/testData/codegen/box/coroutines/controllerAccessFromInnerLambda.kt b/compiler/testData/codegen/box/coroutines/controllerAccessFromInnerLambda.kt new file mode 100644 index 00000000000..b40605fa74f --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/controllerAccessFromInnerLambda.kt @@ -0,0 +1,37 @@ +class Controller { + var result = false + suspend fun suspendHere(x: Continuation) { + x.resume("OK") + } + + fun foo() { + result = true + } +} + +fun builder(coroutine c: Controller.() -> Continuation) { + val controller = Controller() + c(controller).resume(Unit) + if (!controller.result) throw java.lang.RuntimeException("fail") +} + +fun noinlineRun(block: () -> Unit) { + block() +} + +fun box(): String { + builder { + if (suspendHere() != "OK") { + throw java.lang.RuntimeException("fail 1") + } + noinlineRun { + foo() + } + + if (suspendHere() != "OK") { + throw java.lang.RuntimeException("fail 2") + } + } + + return "OK" +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 386991099bb..31b54d0ba9a 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -4153,6 +4153,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/coroutines"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("controllerAccessFromInnerLambda.kt") + public void testControllerAccessFromInnerLambda() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/coroutines/controllerAccessFromInnerLambda.kt"); + doTest(fileName); + } + @TestMetadata("defaultParametersInSuspend.kt") public void testDefaultParametersInSuspend() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/coroutines/defaultParametersInSuspend.kt");