Graalvm compilation to native image fails - scala 2.13.1

I’m playing around with quarkus.io in scala, and I’m running into an issue with 2.13. When I change the project to use scala 2.13.1 and try to create the native image (with graalvm 19.2.1), I do end up with the following error :

Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: java.lang.invoke.LambdaForm$MH/2055769724.invoke_MT(Object, Object)
Detailed message:
Trace:
at parsing scala.runtime.Statics.releaseFence(Statics.java:148)
Call path from entry point to scala.runtime.Statics.releaseFence():
at scala.runtime.Statics.releaseFence(Statics.java:148)
at scala.collection.mutable.ListBuffer.toList(ListBuffer.scala:80)
at scala.collection.immutable.List$.from(List.scala:617)
at scala.collection.immutable.List$.from(List.scala:611)
at scala.collection.IterableFactory.apply(Factory.scala:103)
at scala.collection.IterableFactory.apply$(Factory.scala:103)
at scala.collection.immutable.List$.apply(List.scala:611)
at scala.collection.SeqFactory$Delegate.apply(Factory.scala:304)
at com.technincaleader.rest.AnimalResource.(AnimalResource.scala:17)
at com.technincaleader.rest.AnimalResource_Bean.create(AnimalResource_Bean.zig:206)
at com.technincaleader.rest.AnimalResource_Bean.create(AnimalResource_Bean.zig:152)
at io.quarkus.arc.RequestContext.get(RequestContext.java:62)
at io.quarkus.resteasy.jsonb.runtime.QuarkusJsonbContextResolver_ClientProxy.arc$delegate(QuarkusJsonbContextResolver_ClientProxy.zig:170)
at io.quarkus.resteasy.jsonb.runtime.QuarkusJsonbContextResolver_ClientProxy.toString(QuarkusJsonbContextResolver_ClientProxy.zig:94)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.oracle.svm.core.amd64.AMD64CPUFeatureAccess.verifyHostSupportsArchitecture(AMD64CPUFeatureAccess.java:179)
at com.oracle.svm.core.JavaMainWrapper.runCore(JavaMainWrapper.java:129)
at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:186)
at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)

com.oracle.svm.core.util.UserError$UserException: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: java.lang.invoke.LambdaForm$MH/2055769724.invoke_MT(Object, Object)
Detailed message:
Trace:
at parsing scala.runtime.Statics.releaseFence(Statics.java:148)
Call path from entry point to scala.runtime.Statics.releaseFence():
at scala.runtime.Statics.releaseFence(Statics.java:148)
at scala.collection.mutable.ListBuffer.toList(ListBuffer.scala:80)
at scala.collection.immutable.List$.from(List.scala:617)
at scala.collection.immutable.List$.from(List.scala:611)
at scala.collection.IterableFactory.apply(Factory.scala:103)
at scala.collection.IterableFactory.apply$(Factory.scala:103)
at scala.collection.immutable.List$.apply(List.scala:611)
at scala.collection.SeqFactory$Delegate.apply(Factory.scala:304)
at com.technincaleader.rest.AnimalResource.(AnimalResource.scala:17)
at com.technincaleader.rest.AnimalResource_Bean.create(AnimalResource_Bean.zig:206)
at com.technincaleader.rest.AnimalResource_Bean.create(AnimalResource_Bean.zig:152)
at io.quarkus.arc.RequestContext.get(RequestContext.java:62)
at io.quarkus.resteasy.jsonb.runtime.QuarkusJsonbContextResolver_ClientProxy.arc$delegate(QuarkusJsonbContextResolver_ClientProxy.zig:170)
at io.quarkus.resteasy.jsonb.runtime.QuarkusJsonbContextResolver_ClientProxy.toString(QuarkusJsonbContextResolver_ClientProxy.zig:94)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.oracle.svm.core.amd64.AMD64CPUFeatureAccess.verifyHostSupportsArchitecture(AMD64CPUFeatureAccess.java:179)
at com.oracle.svm.core.JavaMainWrapper.runCore(JavaMainWrapper.java:129)
at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:186)
at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)

at com.oracle.svm.core.util.UserError.abort(UserError.java:75)
at com.oracle.svm.hosted.FallbackFeature.reportAsFallback(FallbackFeature.java:223)
at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:737)
at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:526)
at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:444)
at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

Caused by: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: java.lang.invoke.LambdaForm$MH/2055769724.invoke_MT(Object, Object)
Detailed message:
Trace:
at parsing scala.runtime.Statics.releaseFence(Statics.java:148)
Call path from entry point to scala.runtime.Statics.releaseFence():
at scala.runtime.Statics.releaseFence(Statics.java:148)
at scala.collection.mutable.ListBuffer.toList(ListBuffer.scala:80)
at scala.collection.immutable.List$.from(List.scala:617)
at scala.collection.immutable.List$.from(List.scala:611)
at scala.collection.IterableFactory.apply(Factory.scala:103)
at scala.collection.IterableFactory.apply$(Factory.scala:103)
at scala.collection.immutable.List$.apply(List.scala:611)
at scala.collection.SeqFactory$Delegate.apply(Factory.scala:304)
at com.technincaleader.rest.AnimalResource.(AnimalResource.scala:17)
at com.technincaleader.rest.AnimalResource_Bean.create(AnimalResource_Bean.zig:206)
at com.technincaleader.rest.AnimalResource_Bean.create(AnimalResource_Bean.zig:152)
at io.quarkus.arc.RequestContext.get(RequestContext.java:62)
at io.quarkus.resteasy.jsonb.runtime.QuarkusJsonbContextResolver_ClientProxy.arc$delegate(QuarkusJsonbContextResolver_ClientProxy.zig:170)
at io.quarkus.resteasy.jsonb.runtime.QuarkusJsonbContextResolver_ClientProxy.toString(QuarkusJsonbContextResolver_ClientProxy.zig:94)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.oracle.svm.core.amd64.AMD64CPUFeatureAccess.verifyHostSupportsArchitecture(AMD64CPUFeatureAccess.java:179)
at com.oracle.svm.core.JavaMainWrapper.runCore(JavaMainWrapper.java:129)
at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:186)
at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)

at com.oracle.graal.pointsto.constraints.UnsupportedFeatures.report(UnsupportedFeatures.java:130)
at com.oracle.graal.pointsto.BigBang.finish(BigBang.java:565)
at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:688)
... 7 more

Caused by: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: java.lang.invoke.LambdaForm$MH/2055769724.invoke_MT(Object, Object)
at com.oracle.svm.hosted.phases.IntrinsifyMethodHandlesInvocationPlugin.processInvokeWithMethodHandle(IntrinsifyMethodHandlesInvocationPlugin.java:462)
at com.oracle.svm.hosted.phases.IntrinsifyMethodHandlesInvocationPlugin.handleInvoke(IntrinsifyMethodHandlesInvocationPlugin.java:190)
at org.graalvm.compiler.java.BytecodeParser.tryNodePluginForInvocation(BytecodeParser.java:2105)
at org.graalvm.compiler.java.BytecodeParser.appendInvoke(BytecodeParser.java:1788)
at org.graalvm.compiler.java.BytecodeParser.genDynamicInvokeHelper(BytecodeParser.java:1677)
at org.graalvm.compiler.java.BytecodeParser.genInvokeVirtual(BytecodeParser.java:1625)
at org.graalvm.compiler.java.BytecodeParser.genInvokeVirtual(BytecodeParser.java:1610)
at org.graalvm.compiler.java.BytecodeParser.processBytecode(BytecodeParser.java:5123)
at org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(BytecodeParser.java:3267)
at org.graalvm.compiler.java.BytecodeParser.processBlock(BytecodeParser.java:3074)
at org.graalvm.compiler.java.BytecodeParser.build(BytecodeParser.java:976)
at org.graalvm.compiler.java.BytecodeParser.buildRootMethod(BytecodeParser.java:870)
at org.graalvm.compiler.java.GraphBuilderPhase$Instance.run(GraphBuilderPhase.java:84)
at org.graalvm.compiler.phases.Phase.run(Phase.java:49)
at org.graalvm.compiler.phases.BasePhase.apply(BasePhase.java:197)
at org.graalvm.compiler.phases.Phase.apply(Phase.java:42)
at org.graalvm.compiler.phases.Phase.apply(Phase.java:38)
at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.parse(MethodTypeFlowBuilder.java:221)
at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.apply(MethodTypeFlowBuilder.java:340)
at com.oracle.graal.pointsto.flow.MethodTypeFlow.doParse(MethodTypeFlow.java:310)
at com.oracle.graal.pointsto.flow.MethodTypeFlow.ensureParsed(MethodTypeFlow.java:300)
at com.oracle.graal.pointsto.flow.MethodTypeFlow.addContext(MethodTypeFlow.java:107)
at com.oracle.graal.pointsto.flow.StaticInvokeTypeFlow.update(InvokeTypeFlow.java:346)
at com.oracle.graal.pointsto.BigBang$2.run(BigBang.java:510)
at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$execute$0(CompletionExecutor.java:171)
at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402)
… 4 more

The same project successfully compiles to a native image with 2.12.10 without any issues. Any tips / ideas on how I could get 2.13 to work ?

Nevermind, it looks like there are a few existing issues in scala’s github (https://github.com/scala/bug/issues/11634) that references the same issue. It appears that the root cause might be addressed in graal project (https://github.com/oracle/graal/issues/877).

Hopefully by scala 2.13.2 or graal 19.3 (or whatever release number follows 19.2) it would be handled.