Hi all :slightly_smiling_face: We’re trying to u...
# compiler
b
Hi all 🙂 We’re trying to upgrade to Kotlin 1.5, but are a bit stuck. We have a number of places that create a
private typealias
, and then use that alias in a public method. This seems to work in Gradle, but not in our Bazel setup. My main question is, is this valid code and a bug in our Bazel setup, or should we not expose a private typealias in a public api?
Error:
Copy code
io.bazel.kotlin.builder.toolchain.CompilationStatusException: compile phase failed:
exception: org.jetbrains.kotlin.backend.common.BackendException: Backend Internal error: Exception during IR lowering
File being compiled: /Users/bdodson/Snapchat/Dev/.cache/_bazel_root/abfadcbfe16e7919f681fe368583894f/execroot/__main__/components/lenses/analytics-core/src/test/java/com/snap/lenses/analytics/blizzard/BlizzardLensResourcesAnalyticsReporterTest.kt
The root cause java.lang.AssertionError was thrown at: org.jetbrains.kotlin.ir.util.TypeTranslator.toIrTypeAbbreviation(TypeTranslator.kt:167)
	at org.jetbrains.kotlin.backend.common.CodegenUtil.reportBackendException(CodegenUtil.kt:239)
	at org.jetbrains.kotlin.backend.common.CodegenUtil.reportBackendException$default(CodegenUtil.kt:235)
	at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(PhaseBuilders.kt:124)
	at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(PhaseBuilders.kt:112)
	at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.invoke(CompilerPhase.kt:94)
	at org.jetbrains.kotlin.backend.common.phaser.CompositePhase.invoke(PhaseBuilders.kt:30)
	at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.invoke(CompilerPhase.kt:94)
	at org.jetbrains.kotlin.backend.common.phaser.CompilerPhaseKt.invokeToplevel(CompilerPhase.kt:41)
	at org.jetbrains.kotlin.backend.jvm.JvmLower.lower(JvmLower.kt:407)
	at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.doGenerateFilesInternal(JvmIrCodegenFactory.kt:191)
	at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.generateModule(JvmIrCodegenFactory.kt:62)
	at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:35)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.generate(KotlinToJVMBytecodeCompiler.kt:592)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:212)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:155)
	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:169)
	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:52)
	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:88)
	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:44)
	at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:98)
	at io.bazel.kotlin.compiler.BazelK2JVMCompiler.exec(BazelK2JVMCompiler.kt:30)
	at jdk.internal.reflect.GeneratedMethodAccessor95.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at io.bazel.kotlin.builder.toolchain.KotlinToolchain$KotlinCliToolInvoker.compile(KotlinToolchain.kt:185)
	at io.bazel.kotlin.builder.tasks.jvm.Compilation_taskKt$compileKotlin$1$2.invoke(compilation_task.kt:302)
	at io.bazel.kotlin.builder.tasks.jvm.Compilation_taskKt$compileKotlin$1$2.invoke(compilation_task.kt)
	at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.executeCompilerTask(CompilationTaskContext.kt:122)
	at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.executeCompilerTask$default(CompilationTaskContext.kt:118)
	at io.bazel.kotlin.builder.tasks.jvm.Compilation_taskKt.compileKotlin(compilation_task.kt:302)
	at io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor$execute$1$$special$$inlined$apply$lambda$1.invoke(KotlinJvmTaskExecutor.kt:62)
	at io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor$execute$1$$special$$inlined$apply$lambda$1.invoke(KotlinJvmTaskExecutor.kt:33)
	at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.execute(CompilationTaskContext.kt:148)
	at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.execute(CompilationTaskContext.kt:140)
	at io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor$execute$1.invoke(KotlinJvmTaskExecutor.kt:60)
	at io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor$execute$1.invoke(KotlinJvmTaskExecutor.kt:33)
	at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.execute(CompilationTaskContext.kt:148)
	at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.execute(CompilationTaskContext.kt:140)
	at io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor.execute(KotlinJvmTaskExecutor.kt:56)
	at io.bazel.kotlin.builder.tasks.KotlinBuilder.executeJvmTask(KotlinBuilder.kt:233)
	at io.bazel.kotlin.builder.tasks.KotlinBuilder.build(KotlinBuilder.kt:131)
	at io.bazel.kotlin.builder.tasks.CompileKotlin.invoke(CompileKotlin.kt:27)
	at io.bazel.worker.PersistentWorker$compileWork$2$result$1.invoke(PersistentWorker.kt:98)
	at io.bazel.worker.PersistentWorker$compileWork$2$result$1.invoke(PersistentWorker.kt:56)
	at io.bazel.worker.WorkerContext$TaskContext.resultOf(WorkerContext.kt:125)
	at io.bazel.worker.WorkerContext.doTask(WorkerContext.kt:153)
	at io.bazel.worker.PersistentWorker$compileWork$2.invokeSuspend(PersistentWorker.kt:96)
	at io.bazel.worker.PersistentWorker$compileWork$2.invoke(PersistentWorker.kt)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:91)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
	at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
	at io.bazel.worker.PersistentWorker.compileWork(PersistentWorker.kt:95)
	at io.bazel.worker.PersistentWorker$start$1$$special$$inlined$use$lambda$1$1$2.invokeSuspend(PersistentWorker.kt:75)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
Caused by: java.lang.AssertionError: TypeAliasDescriptor expected: class AsyncEventLogger (not found)
	at org.jetbrains.kotlin.ir.util.TypeTranslator.toIrTypeAbbreviation(TypeTranslator.kt:167)
	at org.jetbrains.kotlin.ir.util.TypeTranslator.translateType(TypeTranslator.kt:115)
	at org.jetbrains.kotlin.ir.util.TypeTranslator.translateType(TypeTranslator.kt:84)
	at org.jetbrains.kotlin.ir.util.DeclarationStubGenerator.toIrType(DeclarationStubGenerator.kt:244)
	at org.jetbrains.kotlin.ir.util.DeclarationStubGenerator.generateValueParameterStub$ir_tree(DeclarationStubGenerator.kt:248)
	at org.jetbrains.kotlin.ir.declarations.lazy.IrLazyFunctionBase$createValueParameters$1.invoke(IrLazyFunctionBase.kt:32)
	at org.jetbrains.kotlin.ir.declarations.lazy.IrLazyFunctionBase$createValueParameters$1.invoke(IrLazyFunctionBase.kt:29)
	at org.jetbrains.kotlin.ir.declarations.lazy.UnsafeLazyVar$value$1.invoke(lazyUtil.kt:22)
	at org.jetbrains.kotlin.ir.declarations.lazy.UnsafeLazyVar$value$1.invoke(lazyUtil.kt:22)
	at org.jetbrains.kotlin.ir.declarations.StageController.withInitialIr(PersistentApi.kt:25)
	at org.jetbrains.kotlin.ir.declarations.lazy.UnsafeLazyVar.getValue(lazyUtil.kt:40)
	at org.jetbrains.kotlin.ir.declarations.lazy.UnsafeLazyVar.getValue(lazyUtil.kt:32)
	at org.jetbrains.kotlin.ir.declarations.lazy.IrLazyConstructor.getValueParameters(IrLazyConstructor.kt:53)
	at org.jetbrains.kotlin.backend.jvm.codegen.IrInlineCodegenKt.isInlineArrayConstructor(IrInlineCodegen.kt:273)
	at org.jetbrains.kotlin.backend.jvm.codegen.IrInlineCodegenKt.isInlineFunctionCall(IrInlineCodegen.kt:269)
	at org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator.visitFunctionAccess(IrInlineReferenceLocator.kt:31)
	at org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator.visitFunctionAccess(IrInlineReferenceLocator.kt:19)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitor$DefaultImpls.visitConstructorCall(IrElementVisitor.kt:78)
	at org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator.visitConstructorCall(IrInlineReferenceLocator.kt:19)
	at org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator.visitConstructorCall(IrInlineReferenceLocator.kt:19)
	at org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl.accept(IrConstructorCallImpl.kt:28)
	at org.jetbrains.kotlin.ir.expressions.IrExpressionBody.acceptChildren(IrBody.kt:42)
	at org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator.visitElement(IrInlineReferenceLocator.kt:21)
	at org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator.visitElement(IrInlineReferenceLocator.kt:19)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitor$DefaultImpls.visitBody(IrElementVisitor.kt:46)
	at org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator.visitBody(IrInlineReferenceLocator.kt:19)
	at org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator.visitBody(IrInlineReferenceLocator.kt:19)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitor$DefaultImpls.visitExpressionBody(IrElementVisitor.kt:47)
	at org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator.visitExpressionBody(IrInlineReferenceLocator.kt:19)
	at org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator.visitExpressionBody(IrInlineReferenceLocator.kt:19)
	at org.jetbrains.kotlin.ir.expressions.IrExpressionBody.accept(IrBody.kt:36)
	at org.jetbrains.kotlin.ir.declarations.IrField.acceptChildren(IrField.kt:38)
	at org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator.visitDeclaration(IrInlineReferenceLocator.kt:26)
	at org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator.visitDeclaration(IrInlineReferenceLocator.kt:19)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitor$DefaultImpls.visitField(IrElementVisitor.kt:37)
	at org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator.visitField(IrInlineReferenceLocator.kt:19)
	at org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator.visitField(IrInlineReferenceLocator.kt:19)
	at org.jetbrains.kotlin.ir.declarations.IrField.accept(IrField.kt:35)
...
snippets:
Copy code
internal class BlizzardLensResourcesAnalyticsReporter(
    private val logger: AsyncEventLogger
) : LensResourcesAnalyticsReporter {
    ...
}
private typealias AsyncEventLogger = (() -> EventBase) -> Unit
and test, which fails to compile:
Copy code
private val logger = mock<(() -> EventBase) -> Unit> {
        on { invoke(any()) } doReturn Unit
    }
    private val subject = BlizzardLensResourcesAnalyticsReporter(logger)
r
Seems like https://youtrack.jetbrains.com/issue/KT-45308 with a slightly different source, some of the duplicates are closer
Although it looks like it's thrown during reporting a different error rather than the lowering itself
Were you trying 1.5.20? Looks like that issue at least is fixed there.
b
I wasnt, posted this before I saw it was released. I’ll give it a shot!
g
We had very similar issue with typealias with new IR (our typealias was public but not avilable on classpath of another module), but it was fixed for us on 1.5.0
b
Confirmed this was fixed for us, thanks again Ryan! We’re stuck on a few other issues that I’m still investigating. 3+ million lines of code definitely puts a new compiler backend to the test.
(that is, 1.5.20 worked for us, 1.5.0 / 1.5.10 did not)