You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[native-image] Error encountered while parsing com.oracle.svm.reflect.proxies.Proxy_java_lang_Class_initted.get(java.lang.Object) when compiling Groovy class
#784
Closed
wololock opened this issue
Nov 7, 2018
· 5 comments
Latest 1.0-RC9 (and 1.0-RC8) started failing when building a native image of a simple Groovy class. It compiled and worked correctly in 1.0-RC7. Here is the example I used to build a native image:
RandomNumber.groovy
importgroovy.transform.CompileStaticimportgroovy.transform.TypeChecked@CompileStatic@TypeCheckedclassRandomNumber {
staticvoidmain(String[] args) {
def random =newRandom().nextInt(1000)
println"The random number is: $random"def sum = (0..random).sum { intnum-> num *2 }
println"The doubled sum of numbers between 0 and $random is $sum"
}
}
Compiling this example and running as a Java program:
> groovy -version
Groovy Version: 2.5.2 JVM: 1.8.0_192 Vendor: Oracle Corporation OS: Linux
> groovyc RandomNumber.groovy
> java -version
openjdk version "1.8.0_192"
OpenJDK Runtime Environment (build 1.8.0_192-20181024121959.buildslave.jdk8u-src-tar--b12)
GraalVM 1.0.0-rc9 (build 25.192-b12-jvmci-0.49, mixed mode)
> java -cp ".:$HOME/.m2/repository/org/codehaus/groovy/groovy/2.5.2/groovy-2.5.2.jar" RandomNumber
The random number is: 412
The doubled sum of numbers between 0 and 412 is 170156
Now, when I try to build a native image with the following command:
[randomnumber:21497] classlist: 1,892.40 ms
[randomnumber:21497] (cap): 694.16 ms
[randomnumber:21497] setup: 2,001.22 ms
[randomnumber:21497] analysis: 18,148.55 ms
error: Error encountered while parsing com.oracle.svm.reflect.proxies.Proxy_java_lang_Class_initted.get(java.lang.Object)
Parsing context:
parsing java.lang.reflect.Field.get(Field.java:393)
parsing org.codehaus.groovy.reflection.CachedField.getProperty(CachedField.java:55)
parsing groovy.lang.MetaClassImpl.invokePropertyOrMissing(MetaClassImpl.java:1270)
parsing groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1237)
parsing groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1041)
parsing groovy.lang.Closure.call(Closure.java:421)
parsing org.codehaus.groovy.runtime.DefaultGroovyMethods.sum(DefaultGroovyMethods.java:6613)
parsing org.codehaus.groovy.runtime.DefaultGroovyMethods.sum(DefaultGroovyMethods.java:6513)
parsing RandomNumber.main(RandomNumber.groovy:12)
parsing com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:164)
parsing com.oracle.svm.core.code.CEntryPointCallStubs.com_002eoracle_002esvm_002ecore_002eJavaMainWrapper_002erun_0028int_002corg_002egraalvm_002enativeimage_002ec_002etype_002eCCharPointerPointer_0029(generated:0)
Original error: org.graalvm.compiler.graph.GraalGraphError: com.oracle.svm.core.util.VMError$HostedError: should not reach here
at node: 4|LoadField#initted
at org.graalvm.compiler.phases.common.CanonicalizerPhase$Instance.tryCanonicalize(CanonicalizerPhase.java:340)
at org.graalvm.compiler.phases.common.CanonicalizerPhase$Instance.processNode(CanonicalizerPhase.java:262)
at org.graalvm.compiler.phases.common.CanonicalizerPhase$Instance.processWorkSet(CanonicalizerPhase.java:241)
at org.graalvm.compiler.phases.common.CanonicalizerPhase$Instance.run(CanonicalizerPhase.java:211)
at org.graalvm.compiler.phases.common.CanonicalizerPhase.run(CanonicalizerPhase.java:125)
at org.graalvm.compiler.phases.common.CanonicalizerPhase.run(CanonicalizerPhase.java:66)
at org.graalvm.compiler.phases.BasePhase.apply(BasePhase.java:197)
at org.graalvm.compiler.phases.BasePhase.apply(BasePhase.java:139)
at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.parse(MethodTypeFlowBuilder.java:214)
at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.apply(MethodTypeFlowBuilder.java:323)
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.DefaultAnalysisPolicy$DefaultVirtualInvokeTypeFlow.onObservedUpdate(DefaultAnalysisPolicy.java:186)
at com.oracle.graal.pointsto.flow.TypeFlow.notifyObservers(TypeFlow.java:347)
at com.oracle.graal.pointsto.flow.TypeFlow.update(TypeFlow.java:389)
at com.oracle.graal.pointsto.BigBang$2.run(BigBang.java:508)
at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$execute$0(CompletionExecutor.java:174)
at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402)
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.svm.core.util.VMError$HostedError: should not reach here
at com.oracle.svm.core.util.VMError.shouldNotReachHere(VMError.java:62)
at com.oracle.svm.hosted.substitute.AnnotatedField.allowConstantFolding(AnnotatedField.java:78)
at com.oracle.svm.hosted.ameta.AnalysisConstantFieldProvider.readConstantField(AnalysisConstantFieldProvider.java:62)
at org.graalvm.compiler.nodes.util.ConstantFoldUtil.tryConstantFold(ConstantFoldUtil.java:47)
at org.graalvm.compiler.nodes.java.LoadFieldNode.asConstant(LoadFieldNode.java:164)
at org.graalvm.compiler.nodes.java.LoadFieldNode.canonical(LoadFieldNode.java:132)
at org.graalvm.compiler.nodes.java.LoadFieldNode.canonical(LoadFieldNode.java:123)
at org.graalvm.compiler.nodes.java.LoadFieldNode.canonical(LoadFieldNode.java:68)
at org.graalvm.compiler.graph.spi.Canonicalizable$Unary.canonical(Canonicalizable.java:99)
at org.graalvm.compiler.phases.common.CanonicalizerPhase$Instance.tryCanonicalize(CanonicalizerPhase.java:335)
... 22 more
Error: Image building with exit status 1
This example works fine when using 1.0-RC7:
> sdk use java 1.0.0-rc7-graal
Using java version 1.0.0-rc7-graal in this shell.
> native-image -H:+AllowVMInspection -H:+ReportUnsupportedElementsAtRuntime -H:ReflectionConfigurationFiles=reflection.json --no-server -cp ".:$HOME/.m2/repository/org/codehaus/groovy/groovy/2.5.2/groovy-2.5.2.jar" RandomNumber
[randomnumber:10325] classlist: 2,186.43 ms
[randomnumber:10325] (cap): 601.71 ms
[randomnumber:10325] setup: 1,185.65 ms
[randomnumber:10325] (typeflow): 7,294.08 ms
[randomnumber:10325] (objects): 5,632.99 ms
[randomnumber:10325] (features): 105.03 ms
[randomnumber:10325] analysis: 13,302.38 ms
[randomnumber:10325] universe: 548.40 ms
[randomnumber:10325] (parse): 2,074.37 ms
[randomnumber:10325] (inline): 2,663.68 ms
[randomnumber:10325] (compile): 11,294.96 ms
[randomnumber:10325] compile: 16,901.73 ms
[randomnumber:10325] image: 1,800.13 ms
[randomnumber:10325] write: 361.00 ms
[randomnumber:10325] [total]: 36,552.59 ms
> ./randomnumber
The random number is: 524
The doubled sum of numbers between 0 and 524 is 275100
What might be the reason this example started failing with 1.0-RC8?
The text was updated successfully, but these errors were encountered:
Latest 1.0-RC9 (and 1.0-RC8) started failing when building a native image of a simple Groovy class. It compiled and worked correctly in 1.0-RC7. Here is the example I used to build a native image:
RandomNumber.groovy
reflection.json
Compiling this example and running as a Java program:
Now, when I try to build a native image with the following command:
native-image -H:+AllowVMInspection -H:+ReportUnsupportedElementsAtRuntime -H:ReflectionConfigurationFiles=reflection.json --no-server -cp ".:$HOME/.m2/repository/org/codehaus/groovy/groovy/2.5.2/groovy-2.5.2.jar" RandomNumber
it fails with following exception:
This example works fine when using 1.0-RC7:
What might be the reason this example started failing with 1.0-RC8?
The text was updated successfully, but these errors were encountered: