Skip to content

Issue 3 - Opening a lambda inside a suspend context causes build to fail #5

@aballano

Description

@aballano

Android Studio Build:

Android Studio 4.0 Canary 8
Build #AI-193.5233.102.40.6107147, built on January 2, 2020
Runtime version: 1.8.0_212-release-1586-b4-5784211 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.14.6
GC: ParNew, ConcurrentMarkSweep
Memory: 4012M
Cores: 12
Registry: ide.new.welcome.screen.force=true, ide.balloon.shadow.size=0
Non-Bundled Plugins: com.chrisrm.idea.MaterialThemeUI, com.squareup.sqldelight

Version of Gradle Plugin:

4.0.0-alpha08

Version of Gradle:

gradle-6.1-rc-1-all

Version of Java:

1.8

OS:

MacOs Mojave 10.14.6

Steps to Reproduce:

  • Put this in the code anywhere:
    fun a() {
        suspend {
            { }
        }
    }
    
  • Build the app

Sample branch:
https://github.com/arrow-kt/compose-samples/blob/gotchas/gist3/JetNews/app/src/main/java/com/example/jetnews/MainActivity.kt

Stacktrace:

Details
e: java.lang.IllegalStateException: Backend Internal error: Exception during code generation
Element is unknownThe root cause java.lang.RuntimeException was thrown at: org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.generate(FunctionCodegen.kt:42)
        at org.jetbrains.kotlin.codegen.CompilationErrorHandler.lambda$static$0(CompilationErrorHandler.java:35)
        at org.jetbrains.kotlin.backend.jvm.JvmBackendFacade.doGenerateFilesInternal$backend_jvm(JvmBackendFacade.kt:114)
        at org.jetbrains.kotlin.backend.jvm.JvmBackendFacade.doGenerateFilesInternal$backend_jvm$default(JvmBackendFacade.kt:64)
        at org.jetbrains.kotlin.backend.jvm.JvmBackendFacade.doGenerateFilesInternal$backend_jvm(JvmBackendFacade.kt:52)
        at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.generateModule(JvmIrCodegenFactory.kt:36)
        at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.doGenerateFiles(KotlinCodegenFacade.java:47)
        at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:39)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.generate(KotlinToJVMBytecodeCompiler.kt:638)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:198)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:172)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:56)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:85)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:43)
        at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:104)
        at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:349)
        at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:105)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:237)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.access$compileIncrementally(IncrementalCompilerRunner.kt:37)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner$compile$2.invoke(IncrementalCompilerRunner.kt:79)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:91)
        at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:606)
        at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:99)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1645)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
        at sun.rmi.transport.Transport$1.run(Transport.java:200)
        at sun.rmi.transport.Transport$1.run(Transport.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.RuntimeException: Exception while generating code for:
FUN name:invokeSuspend visibility:public modality:FINAL <> ($this:com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation, result:kotlin.Result<kotlin.Any?>) returnType:kotlin.Any?
  overridden:
    protected abstract fun invokeSuspend (result: kotlin.Result<kotlin.Any?>): kotlin.Any? declared in kotlin.coroutines.jvm.internal.SuspendLambda
  $this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation
  VALUE_PARAMETER IR_EXTERNAL_DECLARATION_STUB name:result index:0 type:kotlin.Result<kotlin.Any?>
  BLOCK_BODY
    RETURN type=kotlin.Any from='public final fun invokeSuspend (result: kotlin.Result<kotlin.Any?>): kotlin.Any? declared in com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation'
      BLOCK type=com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>> origin=null
        CLASS LAMBDA_IMPL CLASS name:<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>> modality:FINAL visibility:public/*package*/ superTypes:[kotlin.jvm.internal.Lambda; kotlin.jvm.functions.Function0<kotlin.Unit>]
          $this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>>
          CONSTRUCTOR FUNCTION_REFERENCE_IMPL visibility:public/*package*/ <> () returnType:com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>> [primary]
            BLOCK_BODY
              DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> (arity: kotlin.Int) declared in kotlin.jvm.internal.Lambda'
                arity: CONST Int type=kotlin.Int value=0
              BLOCK type=kotlin.Unit origin=null
          FUN name:invoke visibility:public modality:FINAL <> ($this:com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>>) returnType:kotlin.Unit
            $this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>>
            BLOCK_BODY
              RETURN type=kotlin.Any from='public final fun invokeSuspend (result: kotlin.Result<kotlin.Any?>): kotlin.Any? declared in com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation'
                GET_FIELD 'FIELD FIELD_FOR_OBJECT_INSTANCE name:INSTANCE type:kotlin.Unit visibility:public [final,static]' type=kotlin.Unit origin=null
          FUN BRIDGE name:invoke visibility:public modality:OPEN <> ($this:com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>>) returnType:kotlin.Any?
            overridden:
              public abstract fun invoke (): R of kotlin.jvm.functions.Function0 declared in kotlin.jvm.functions.Function0
            $this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>>
            BLOCK_BODY
              RETURN type=kotlin.Nothing from='public open fun invoke (): kotlin.Any? declared in com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>>'
                TYPE_OP type=kotlin.Any? origin=IMPLICIT_CAST typeOperand=kotlin.Any?
                  CALL 'public final fun invoke (): kotlin.Unit declared in com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>>' type=kotlin.Unit origin=BRIDGE_DELEGATION
                    $this: GET_VAR '<this>: com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>> declared in com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>>.invoke' type=com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>> origin=null
        CONSTRUCTOR_CALL 'public/*package*/ constructor <init> () [primary] declared in com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>>' type=com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>> origin=null

        at org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.generate(FunctionCodegen.kt:42)
        at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen.generateMethod(ClassCodegen.kt:286)
        at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen.generateDeclaration(ClassCodegen.kt:242)
        at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen.generate(ClassCodegen.kt:133)
        at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen.generate(ClassCodegen.kt:139)
        at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen$Companion.generate(ClassCodegen.kt:227)
        at org.jetbrains.kotlin.backend.jvm.JvmBackendFacade.doGenerateFilesInternal$backend_jvm(JvmBackendFacade.kt:110)
        ... 38 more
Caused by: java.lang.RuntimeException: Exception while generating code for:
FUN name:invoke visibility:public modality:FINAL <> ($this:com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>>) returnType:kotlin.Unit
  $this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation.invokeSuspend.<function reference to com.example.jetnews.MainActivityKt.a.<anonymous>.<anonymous>>
  BLOCK_BODY
    RETURN type=kotlin.Any from='public final fun invokeSuspend (result: kotlin.Result<kotlin.Any?>): kotlin.Any? declared in com.example.jetnews.MainActivityKt.$a$lambda-0$Continuation'
      GET_FIELD 'FIELD FIELD_FOR_OBJECT_INSTANCE name:INSTANCE type:kotlin.Unit visibility:public [final,static]' type=kotlin.Unit origin=null

        at org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.generate(FunctionCodegen.kt:42)
        at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen.generateMethod(ClassCodegen.kt:286)
        at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen.generateDeclaration(ClassCodegen.kt:242)
        at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen.generate(ClassCodegen.kt:133)
        at org.jetbrains.kotlin.backend.jvm.codegen.ClassCodegen.generateLocalClass(ClassCodegen.kt:255)
        at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitClass(ExpressionCodegen.kt:545)
        at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitClass(ExpressionCodegen.kt:97)
        at org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl.accept(IrClassImpl.kt:89)
        at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitStatementContainer(ExpressionCodegen.kt:307)
        at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitContainerExpression(ExpressionCodegen.kt:314)
        at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitContainerExpression(ExpressionCodegen.kt:97)
        at org.jetbrains.kotlin.ir.visitors.IrElementVisitor$DefaultImpls.visitBlock(IrElementVisitor.kt:61)
        at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitBlock(ExpressionCodegen.kt:279)
        at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitBlock(ExpressionCodegen.kt:97)
        at org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl.accept(IrBlockImpl.kt:52)
        at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitReturn(ExpressionCodegen.kt:571)
        at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitReturn(ExpressionCodegen.kt:97)
        at org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl.accept(IrReturnImpl.kt:40)
        at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitStatementContainer(ExpressionCodegen.kt:307)
        at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitBlockBody(ExpressionCodegen.kt:311)
        at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.visitBlockBody(ExpressionCodegen.kt:97)
        at org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl.accept(IrBlockBodyImpl.kt:40)
        at org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen.generate(ExpressionCodegen.kt:181)
        at org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.doGenerate(FunctionCodegen.kt:94)
        at org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.generate(FunctionCodegen.kt:40)
        ... 44 more
Caused by: org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: Couldn't transform method node:
invoke ()V:
   L0
    LINENUMBER 36 L0
    GETSTATIC kotlin/Unit.INSTANCE : Lkotlin/Unit;
    INVOKESTATIC $$$$$NON_LOCAL_RETURN$$$$$.invokeSuspend ()V
    ARETURN
   L1
    NOP
   L2
    LOCALVARIABLE this Lcom/example/jetnews/MainActivityKt$a$1$1; L0 L2 0
    MAXSTACK = 1
    MAXLOCALS = 1

Element is unknownThe root cause java.lang.AssertionError was thrown at: org.jetbrains.kotlin.codegen.optimization.MethodVerifier.transform(MethodVerifier.kt:28)
        at org.jetbrains.kotlin.codegen.TransformationMethodVisitor.visitEnd(TransformationMethodVisitor.kt:92)
        at org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.doGenerate(FunctionCodegen.kt:98)
        at org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.generate(FunctionCodegen.kt:40)
        ... 68 more
Caused by: java.lang.AssertionError: AFTER mandatory stack transformations: incorrect bytecode
        at org.jetbrains.kotlin.codegen.optimization.MethodVerifier.transform(MethodVerifier.kt:28)
        at org.jetbrains.kotlin.codegen.optimization.transformer.CompositeMethodTransformer.transform(CompositeMethodTransformer.kt:25)
        at org.jetbrains.kotlin.codegen.optimization.OptimizationMethodVisitor.performTransformations(OptimizationMethodVisitor.kt:62)
        at org.jetbrains.kotlin.codegen.TransformationMethodVisitor.visitEnd(TransformationMethodVisitor.kt:70)
        ... 70 more
Caused by: java.lang.RuntimeException: org.jetbrains.org.objectweb.asm.tree.analysis.AnalyzerException: Error at instruction 4: Incompatible return type: expected null, but found R
        at org.jetbrains.kotlin.codegen.optimization.transformer.MethodTransformer.runAnalyzer(MethodTransformer.java:34)
        at org.jetbrains.kotlin.codegen.optimization.transformer.MethodTransformer.analyze(MethodTransformer.java:44)
        at org.jetbrains.kotlin.codegen.optimization.MethodVerifier.transform(MethodVerifier.kt:26)
        ... 73 more
Caused by: org.jetbrains.org.objectweb.asm.tree.analysis.AnalyzerException: Error at instruction 4: Incompatible return type: expected null, but found R
        at org.jetbrains.org.objectweb.asm.tree.analysis.Analyzer.analyze(Analyzer.java:291)
        at org.jetbrains.kotlin.codegen.optimization.transformer.MethodTransformer.runAnalyzer(MethodTransformer.java:31)
        ... 75 more
Caused by: org.jetbrains.org.objectweb.asm.tree.analysis.AnalyzerException: Incompatible return type: expected null, but found R
        at org.jetbrains.org.objectweb.asm.tree.analysis.BasicVerifier.returnOperation(BasicVerifier.java:413)
        at org.jetbrains.org.objectweb.asm.tree.analysis.BasicVerifier.returnOperation(BasicVerifier.java:43)
        at org.jetbrains.org.objectweb.asm.tree.analysis.Frame.execute(Frame.java:581)
        at org.jetbrains.org.objectweb.asm.tree.analysis.Analyzer.analyze(Analyzer.java:187)
        ... 76 more

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions