https://kotlinlang.org logo
#compiler
Title
# compiler
p

PHondogo

11/09/2023, 9:41 AM
Hello! Trying to adopt JS target and got compiler internal exception (in thread). I can't share project for now, so I need to solve it by myself. May be there are any suggestions how to find reason for such cases?
Copy code
java.lang.IllegalStateException: IrTypeParameterSymbolImpl is unbound. Signature: null
	at org.jetbrains.kotlin.ir.symbols.impl.IrBindableSymbolBase.getOwner(IrPrivateSymbolBase.kt)
	at org.jetbrains.kotlin.ir.types.IrTypeSystemContext$DefaultImpls.supertypes(IrTypeSystemContext.kt:171)
	at org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl.supertypes(IrTypeSystemContext.kt:645)
	at org.jetbrains.kotlin.ir.types.IrTypeSystemContextWithAdditionalAxioms.supertypes(IrTypeCheckerUtils.kt)
	at org.jetbrains.kotlin.types.AbstractTypeChecker.collectAllSupertypesWithGivenTypeConstructor(AbstractTypeChecker.kt:906)
	at org.jetbrains.kotlin.types.AbstractTypeChecker.findCorrespondingSupertypes(AbstractTypeChecker.kt:687)
	at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOfForSingleClassifierType(AbstractTypeChecker.kt:377)
	at org.jetbrains.kotlin.types.AbstractTypeChecker.completeIsSubTypeOf(AbstractTypeChecker.kt:284)
	at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOf(AbstractTypeChecker.kt:244)
	at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOf$default(AbstractTypeChecker.kt:234)
	at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeForSameConstructor(AbstractTypeChecker.kt:478)
	at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOfForSingleClassifierType(AbstractTypeChecker.kt:381)
	at org.jetbrains.kotlin.types.AbstractTypeChecker.completeIsSubTypeOf(AbstractTypeChecker.kt:284)
	at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOf(AbstractTypeChecker.kt:244)
	at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOf$default(AbstractTypeChecker.kt:234)
	at org.jetbrains.kotlin.types.AbstractTypeChecker.equalTypes(AbstractTypeChecker.kt:263)
	at org.jetbrains.kotlin.ir.overrides.IrOverridingUtilKt.isOverridableByWithoutExternalConditions(IrOverridingUtil.kt:703)
	at org.jetbrains.kotlin.ir.overrides.IrOverridingUtil.isOverridableBy(IrOverridingUtil.kt:627)
	at org.jetbrains.kotlin.ir.overrides.IrOverridingUtil.extractAndBindOverridesForMember(IrOverridingUtil.kt:250)
	at org.jetbrains.kotlin.ir.overrides.IrOverridingUtil.generateOverridesInFunctionGroup(IrOverridingUtil.kt:232)
	at org.jetbrains.kotlin.ir.overrides.IrOverridingUtil.buildFakeOverridesForClass(IrOverridingUtil.kt:173)
	at org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilder$buildFakeOverrideChainsForClass$2$1.invoke(FakeOverrides.kt:125)
	at org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilder$buildFakeOverrideChainsForClass$2$1.invoke(FakeOverrides.kt:124)
	at org.jetbrains.kotlin.backend.common.serialization.signature.PublicIdSignatureComputer.inFile(IdSignatureSerializer.kt:45)
	at org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureSerializer.inFile(IdSignatureSerializer.kt:215)
	at org.jetbrains.kotlin.backend.common.serialization.DeclarationTable.inFile(DeclarationTable.kt:62)
	at org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilder.buildFakeOverrideChainsForClass(FakeOverrides.kt:124)
	at org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilder.provideFakeOverrides(FakeOverrides.kt:281)
	at org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilder.provideFakeOverrides(FakeOverrides.kt:291)
	at org.jetbrains.kotlin.backend.common.serialization.KotlinIrLinker.postProcess(KotlinIrLinker.kt:226)
	at org.jetbrains.kotlin.ir.backend.js.KlibKt.getIrModuleInfoForKlib(klib.kt:305)
	at org.jetbrains.kotlin.ir.backend.js.KlibKt.loadIr(klib.kt:242)
	at org.jetbrains.kotlin.ir.backend.js.CompilerKt.compile(compiler.kt:55)
	at org.jetbrains.kotlin.ir.backend.js.CompilerKt.compile$default(compiler.kt:39)
	at org.jetbrains.kotlin.cli.js.K2JsIrCompiler$Ir2JsTransformer.lowerIr(K2JsIrCompiler.kt:103)
	at org.jetbrains.kotlin.cli.js.K2JsIrCompiler$Ir2JsTransformer.makeJsCodeGenerator(K2JsIrCompiler.kt:126)
	at org.jetbrains.kotlin.cli.js.K2JsIrCompiler$Ir2JsTransformer.compileAndTransformIrNew(K2JsIrCompiler.kt:134)
	at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.doExecute(K2JsIrCompiler.kt:391)
	at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:181)
	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.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1523)
	at jdk.internal.reflect.GeneratedMethodAccessor91.invoke(Unknown Source)
y

Youssef Shoaib [MOD]

11/09/2023, 11:14 AM
Looks like there's an issue with a library that you're using. Not entirely sure what can be done about that, but maybe try and see if you can narrow down what library it is. The compiler tries to load a Klib, deserialize it into Ir, then ends up failing because it does some type checking on that library and it has some missing information about a type parameter.
p

PHondogo

11/09/2023, 11:40 AM
Thanks for explanation! I'll try to narrow.
I've found the cause (compilation fails for JS target) :
Copy code
interface TestCache {

    suspend fun <K : Key<V>, V : Any> get(key: K, creator: (K) -> V?): V?

    interface Key<V : Any>
}

fun test() {
    object : TestCache { // This is the cause. If make class implementing TestCache and instantiate it then it is ok. (For jvm and Android targets both variants compile fine)
        override suspend fun <K : TestCache.Key<V>, V : Any> get(key: K, creator: (K) -> V?): V? {
            return null
        }
    }
}
Probably it is a bug in compiler for JS target.