JetBrains / compose-multiplatform

Compose Multiplatform, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.
https://jetbrains.com/lp/compose-multiplatform
Apache License 2.0
15.24k stars 1.11k forks source link

Unable to compile kotlinjs #4876

Closed joshafeinberg closed 6 days ago

joshafeinberg commented 1 month ago

Describe the bug

After upgrading to Kotlin 2.0.0 and Compose Multiplatform 1.6.10 I get an error on the compileKotlinJs task. Other platforms work (android and jvm)

Task :common-ui:compileKotlinJs FAILED e: java.lang.AssertionError: No such value argument slot in IrCallImpl: 1 (total=1) at org.jetbrains.kotlin.ir.expressions.IrExpressionsKt.checkArgumentSlotAccess(IrExpressions.kt:73) at org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression.putValueArgument(IrMemberAccessExpression.kt:50) at androidx.compose.compiler.plugins.kotlin.lower.ComposerParamTransformer.withComposerParamIfNeeded(ComposerParamTransformer.kt:248) at androidx.compose.compiler.plugins.kotlin.lower.ComposerParamTransformer$copyWithComposerParam$2$5.visitCall(ComposerParamTransformer.kt:641) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitCall(IrElementTransformerVoid.kt:299) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitCall(IrElementTransformerVoid.kt:19) at org.jetbrains.kotlin.ir.expressions.IrCall.accept(IrCall.kt:24) at org.jetbrains.kotlin.ir.expressions.IrExpression.transform(IrExpression.kt:24) at org.jetbrains.kotlin.ir.expressions.IrExpressionBody.transformChildren(IrExpressionBody.kt:31) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitBody(IrElementTransformerVoid.kt:174) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitExpressionBody(IrElementTransformerVoid.kt:182) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitExpressionBody(IrElementTransformerVoid.kt:185) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitExpressionBody(IrElementTransformerVoid.kt:19) at org.jetbrains.kotlin.ir.expressions.IrExpressionBody.accept(IrExpressionBody.kt:21) at org.jetbrains.kotlin.ir.expressions.IrExpressionBody.transform(IrExpressionBody.kt:24) at org.jetbrains.kotlin.ir.declarations.IrValueParameter.transformChildren(IrValueParameter.kt:81) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitDeclaration(IrElementTransformerVoid.kt:40) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitValueParameter(IrElementTransformerVoid.kt:48) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitValueParameter(IrElementTransformerVoid.kt:51) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitValueParameter(IrElementTransformerVoid.kt:19) at org.jetbrains.kotlin.ir.declarations.IrValueParameter.accept(IrValueParameter.kt:71) at org.jetbrains.kotlin.ir.declarations.IrValueParameter.transform(IrValueParameter.kt:74) at org.jetbrains.kotlin.ir.declarations.IrValueParameter.transform(IrValueParameter.kt:23) at org.jetbrains.kotlin.ir.util.TransformKt.transformIfNeeded(transform.kt:118) at org.jetbrains.kotlin.ir.declarations.IrFunction.transformChildren(IrFunction.kt:57) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoidKt.transformChildrenVoid(IrElementTransformerVoid.kt:565) at androidx.compose.compiler.plugins.kotlin.lower.ComposerParamTransformer.copyWithComposerParam(ComposerParamTransformer.kt:593) at androidx.compose.compiler.plugins.kotlin.lower.ComposerParamTransformer.withComposerParamIfNeeded(ComposerParamTransformer.kt:372) at androidx.compose.compiler.plugins.kotlin.lower.ComposerParamTransformer.visitSimpleFunction(ComposerParamTransformer.kt:158) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitSimpleFunction(IrElementTransformerVoid.kt:131) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitSimpleFunction(IrElementTransformerVoid.kt:19) at org.jetbrains.kotlin.ir.declarations.IrSimpleFunction.accept(IrSimpleFunction.kt:36) at org.jetbrains.kotlin.ir.IrElementBase.transform(IrElementBase.kt:24) at org.jetbrains.kotlin.ir.util.TransformKt.transformInPlace(transform.kt:35) at org.jetbrains.kotlin.ir.declarations.IrFile.transformChildren(IrFile.kt:38) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitPackageFragment(IrElementTransformerVoid.kt:146) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitFile(IrElementTransformerVoid.kt:160) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitFile(IrElementTransformerVoid.kt:163) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitFile(IrElementTransformerVoid.kt:19) at org.jetbrains.kotlin.ir.declarations.IrFile.accept(IrFile.kt:28) at org.jetbrains.kotlin.ir.declarations.IrFile.transform(IrFile.kt:31) at org.jetbrains.kotlin.ir.declarations.IrFile.transform(IrFile.kt:20) at org.jetbrains.kotlin.ir.util.TransformKt.transformInPlace(transform.kt:35) at org.jetbrains.kotlin.ir.declarations.IrModuleFragment.transformChildren(IrModuleFragment.kt:43) at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoidKt.transformChildrenVoid(IrElementTransformerVoid.kt:565) at androidx.compose.compiler.plugins.kotlin.lower.ComposerParamTransformer.lower(ComposerParamTransformer.kt:124) at androidx.compose.compiler.plugins.kotlin.ComposeIrGenerationExtension.generate(ComposeIrGenerationExtension.kt:209) at org.jetbrains.kotlin.fir.pipeline.ConvertToIrKt.applyIrGenerationExtensions(convertToIr.kt:260) at org.jetbrains.kotlin.fir.pipeline.ConvertToIrKt.convertToIrAndActualize(convertToIr.kt:139) at org.jetbrains.kotlin.cli.js.klib.JsCompilerPipelineKt.transformFirToIr(jsCompilerPipeline.kt:229) at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.processSourceModuleWithK2(K2JsIrCompiler.kt:618) at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.produceSourceModule(K2JsIrCompiler.kt:485) at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.doExecute(K2JsIrCompiler.kt:325) at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:109) at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:72) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:104) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:48) at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101) at org.jetbrains.kotlin.incremental.IncrementalJsCompilerRunner.runCompiler(IncrementalJsCompilerRunner.kt:211) at org.jetbrains.kotlin.incremental.IncrementalJsCompilerRunner.runCompiler(IncrementalJsCompilerRunner.kt:86) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.doCompile(IncrementalCompilerRunner.kt:506) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:423) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileNonIncrementally(IncrementalCompilerRunner.kt:301) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:129) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile$default(IncrementalCompilerRunner.kt:113) at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execJsIncrementalCompiler(CompileServiceImpl.kt:609) at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execJsIncrementalCompiler(CompileServiceImpl.kt:92) at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1759) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:840)

Affected platforms

Versions

To Reproduce Steps to reproduce the behavior:

  1. Run ./gradlew compileKotlinJs
  2. See error

Unfortunately this is a closed source project, happy to share what debugging details I can or happy to debug a bit more via kotlinlang slack

Expected behavior Build to work

joshafeinberg commented 6 days ago

This ended up being the same issue as https://github.com/JetBrains/compose-multiplatform/issues/4971. I was missing an @Composable actual in my code. Would love a better error message here. Closing this as it's the same issue