Open
Description
It seems like the compiler might produce incorrect bytecode in some cases which leads to really cryptic stacktraces in run time.
This only reproduces on Microsoft JVM 17.0.3 running on Linux, 11.0.15 works just fine. I haven't tested on other vendor's JDKs.
Seems like this does NOT happen on macOS with:
❯ java -version
openjdk version "17.0.5" 2022-10-18
OpenJDK Runtime Environment GraalVM CE 22.3.0 (build 17.0.5+8-jvmci-22.3-b08)
OpenJDK 64-Bit Server VM GraalVM CE 22.3.0 (build 17.0.5+8-jvmci-22.3-b08, mixed mode, sharing)
I don't have an isolated repro yet and, as usually, it might be complicated to get it.
The build log: https://github.com/7mind/izumi/actions/runs/4145278506/jobs/7169427138#step:3:34787
A commit where the failure reproduces: 7mind/izumi@9d3aacb , the commit itself is irrelevant, the issue manifested before. I belive it's a regression in 3.2.2, I haven't seen anything like this before and my environment didn't change.
Error: java.lang.VerifyError: Bad type on operand stack
Error: Exception Details:
Error: Location:
Error: izumi/functional/lifecycle/Lifecycle$LiftF.<init>(Lscala/Function0;Lizumi/functional/quasi/QuasiApplicative;)V @25: invokedynamic
Error: Reason:
Error: Type uninitializedThis (current frame, stack[1]) is not assignable to 'izumi/functional/lifecycle/Lifecycle$LiftF'
Error: Current Frame:
Error: bci: @25
Error: flags: { flagThisUninit }
Error: locals: { uninitializedThis, 'scala/Function0', 'izumi/functional/quasi/QuasiApplicative' }
Error: stack: { uninitializedThis, uninitializedThis, 'scala/Function0' }
Error: Bytecode:
Error: 0000000: b200 2711 0f55 1229 b600 2db2 0027 110f
Error: 0000010: 5412 29b6 002d 2a2a 2bba 0040 0000 032c
Error: 0000020: b700 42b1
Error:
Error: at izumi.functional.lifecycle.Lifecycle$.liftF(Lifecycle.scala:313)
Error: at izumi.distage.model.Injector.produceCustomF(Injector.scala:230)
Error: at izumi.distage.model.Injector.produceCustomF$(Injector.scala:22)
Error: at izumi.distage.InjectorDefaultImpl.produceCustomF(InjectorDefaultImpl.scala:22)
Error: at izumi.distage.model.Injector.produce(Injector.scala:190)
Error: at izumi.distage.model.Injector.produce$(Injector.scala:22)
Error: at izumi.distage.InjectorDefaultImpl.produce(InjectorDefaultImpl.scala:22)