Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

java.lang.IllegalStateException: Symbol with IrClassSymbolImpl is unbound #250

Open
danny-su opened this issue Oct 1, 2022 · 6 comments
Assignees
Labels
bug compiler-plugin Issues related to the atomicfu-compiler-plugin

Comments

@danny-su
Copy link

danny-su commented Oct 1, 2022

Kotlin 1.7.20

java.lang.IllegalStateException: Symbol with IrClassSymbolImpl is unbound
at org.jetbrains.kotlin.ir.symbols.impl.IrBindableSymbolBase.getOwner(IrPrivateSymbolBase.kt:59)
at org.jetbrains.kotlin.ir.types.IrTypesKt.getClassFqName(irTypes.kt:103)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer.isAtomicValueType(AtomicfuJvmIrTransformer.kt:847)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer.access$isAtomicValueType(AtomicfuJvmIrTransformer.kt:43)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitCall(AtomicfuJvmIrTransformer.kt:482)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitCall(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.expressions.IrCall.accept(IrCall.kt:25)
at org.jetbrains.kotlin.ir.expressions.IrExpression.transform(IrExpression.kt:28)
at org.jetbrains.kotlin.ir.expressions.IrExpression.transform(IrExpression.kt:21)
at org.jetbrains.kotlin.ir.util.TransformKt.transformInPlace(transform.kt:35)
at org.jetbrains.kotlin.ir.expressions.IrVararg.transformChildren(IrVararg.kt:33)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitExpression(IrElementTransformer.kt:173)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitExpression(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitExpression(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitVararg(IrElementTransformer.kt:345)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitVararg(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitVararg(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.expressions.IrVararg.accept(IrVararg.kt:26)
at org.jetbrains.kotlin.ir.expressions.IrExpression.transform(IrExpression.kt:28)
at org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression.transformChildren(IrMemberAccessExpression.kt:82)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitExpression(IrElementTransformer.kt:173)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitExpression(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitExpression(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitDeclarationReference(IrElementTransformer.kt:188)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitDeclarationReference(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitDeclarationReference(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitMemberAccess(IrElementTransformer.kt:191)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitMemberAccess(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitMemberAccess(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitFunctionAccess(IrElementTransformer.kt:194)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitFunctionAccess(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitFunctionAccess(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitCall(IrElementTransformer.kt:229)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitCall(AtomicfuJvmIrTransformer.kt:591)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitCall(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.expressions.IrCall.accept(IrCall.kt:25)
at org.jetbrains.kotlin.ir.expressions.IrExpression.transform(IrExpression.kt:28)
at org.jetbrains.kotlin.ir.expressions.IrReturn.transformChildren(IrReturn.kt:32)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitExpression(IrElementTransformer.kt:173)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitExpression(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitExpression(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitReturn(IrElementTransformer.kt:311)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitReturn(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitReturn(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.expressions.IrReturn.accept(IrReturn.kt:25)
at org.jetbrains.kotlin.ir.expressions.IrExpression.transform(IrExpression.kt:28)
at org.jetbrains.kotlin.ir.expressions.IrExpression.transform(IrExpression.kt:21)
at org.jetbrains.kotlin.ir.util.TransformKt.transformInPlace(transform.kt:35)
at org.jetbrains.kotlin.ir.expressions.IrBlockBody.transformChildren(IrBlockBody.kt:31)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitBody(IrElementTransformer.kt:178)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitBody(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitBody(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitBlockBody(IrElementTransformer.kt:185)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitBlockBody(AtomicfuJvmIrTransformer.kt:636)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitBlockBody(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.expressions.IrBlockBody.accept(IrBlockBody.kt:24)
at org.jetbrains.kotlin.ir.expressions.IrBody.transform(IrBody.kt:21)
at org.jetbrains.kotlin.ir.declarations.IrFunction.transformChildren(IrFunction.kt:61)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitDeclaration(IrElementTransformer.kt:103)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitDeclaration(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitDeclaration(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitFunction(IrElementTransformer.kt:120)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitFunction(AtomicfuJvmIrTransformer.kt:475)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitFunction(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitSimpleFunction(IrElementTransformer.kt:150)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitSimpleFunction(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitSimpleFunction(AtomicfuJvmIrTransformer.kt:473)
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.IrClass.transformChildren(IrClass.kt:74)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitDeclaration(IrElementTransformer.kt:103)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitDeclaration(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitDeclaration(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitClass(IrElementTransformer.kt:110)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitClass(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitClass(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.declarations.IrClass.accept(IrClass.kt:64)
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.IrClass.transformChildren(IrClass.kt:74)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitDeclaration(IrElementTransformer.kt:103)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitDeclaration(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitDeclaration(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitClass(IrElementTransformer.kt:110)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitClass(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitClass(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.declarations.IrClass.accept(IrClass.kt:64)
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:40)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformer$DefaultImpls.visitFile(IrElementTransformer.kt:168)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitFile(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$AtomicfuTransformer.visitFile(AtomicfuJvmIrTransformer.kt:473)
at org.jetbrains.kotlin.ir.declarations.IrFile.accept(IrFile.kt:30)
at org.jetbrains.kotlin.ir.declarations.IrFile.transform(IrFile.kt:33)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer.transformAtomicfuDeclarations(AtomicfuJvmIrTransformer.kt:83)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer.transform(AtomicfuJvmIrTransformer.kt:63)
at org.jetbrains.kotlinx.atomicfu.compiler.extensions.AtomicfuLoweringExtension.generate(AtomicfuLoweringExtension.kt:32)
at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr$lambda$1(JvmIrCodegenFactory.kt:183)
at org.jetbrains.kotlin.psi2ir.Psi2IrTranslator.generateModuleFragment(Psi2IrTranslator.kt:99)
at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr(JvmIrCodegenFactory.kt:215)
at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr(JvmIrCodegenFactory.kt:53)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.convertToIr(KotlinToJVMBytecodeCompiler.kt:230)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:113)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:58)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:158)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:53)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:99)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:47)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:475)
at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:125)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:373)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally$default(IncrementalCompilerRunner.kt:318)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.rebuild(IncrementalCompilerRunner.kt:114)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:207)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:79)
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:625)
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:101)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1746)
at jdk.internal.reflect.GeneratedMethodAccessor108.invoke(Unknown Source)
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:833)

@mvicsokolova
Copy link
Collaborator

Hi! Could you please provide a piece of code where you use atomics, that reproduces this issue?

@Nek-12
Copy link

Nek-12 commented Oct 30, 2022

I have the same issue, will provide you with code instead:

    private var token = atomic<String?>(null)

    suspend fun <T> withToken(block: suspend (token: String) -> ApiResult<T>) =
        if (token.value == null) {
            tryWithRefresh(block) 
        } else {
            block(requireNotNull(token.value)) //suspend inline
                .onError { return tryWithRefresh(block) } //inline
        }

  private suspend fun <T> tryWithRefresh(block: suspend (token: String) -> ApiResult<T>) =
        refreshToken() // suspend
            .onSuccess { token.update { it } } // inline
            .then { block(it) } // nested inlining inside
            .onError { token.update { null } } //inline

Another usage (unclear which one causes the crash):

class SuspendLazy<T>(
    private val block: suspend CoroutineScope.() -> T,
) {
    private val value = atomic<Deferred<T>?>(null)

    suspend operator fun invoke(): T = (
            value.value
                ?: coroutineScope {
                    value.updateAndGet { actual ->
                        actual ?: async { block() }
                    }!!
                }
            ).await()
}

@mvicsokolova
Copy link
Collaborator

Hi! Thanks a lot for the reproducer! I'll have a look at it.

@Nek-12
Copy link

Nek-12 commented Mar 8, 2023

Hello, any updates? Still keeping JvmIrTransformation to false because of this

@mvicsokolova mvicsokolova added compiler-plugin Issues related to the atomicfu-compiler-plugin and removed JVM IR labels Apr 28, 2024
@mvicsokolova
Copy link
Collaborator

Hi! A lot of updates were introduced in JVM IR compiler plugin since Kotlin 1.9.0.
Can you confirm if this issue still occurs? 👀

@Nek-12
Copy link

Nek-12 commented Apr 28, 2024

Nope! Already using IR transformation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug compiler-plugin Issues related to the atomicfu-compiler-plugin
Projects
None yet
Development

No branches or pull requests

4 participants