Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[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
Assignees

Comments

@wololock
Copy link

wololock commented Nov 7, 2018

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

import groovy.transform.CompileStatic
import groovy.transform.TypeChecked

@CompileStatic
@TypeChecked
class RandomNumber {
    static void main(String[] args) {
        def random = new Random().nextInt(1000)

        println "The random number is: $random"

        def sum = (0..random).sum { int num -> num * 2 }

        println "The doubled sum of numbers between 0 and $random is $sum"
    }
}

reflection.json

[
  {
    "name": "RandomNumber$_main_closure1",
    "allDeclaredConstructors": true,
    "allPublicConstructors": true,
    "allDeclaredMethods": true,
    "allPublicMethods": true
  },
  {
    "name": "org.codehaus.groovy.runtime.dgm$519",
    "allDeclaredConstructors": true,
    "allPublicConstructors": true,
    "allDeclaredMethods": true,
    "allPublicMethods": true
  },
  {
    "name": "org.codehaus.groovy.runtime.dgm$1172",
    "allDeclaredConstructors": true,
    "allPublicConstructors": true,
    "allDeclaredMethods": true,
    "allPublicMethods": true
  }
]

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:

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:

[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?

@cstancu
Copy link
Member

cstancu commented Nov 20, 2018

This seems to be the same as #518 .

dougxc pushed a commit that referenced this issue Dec 6, 2018
…ld fails for deleted static final fields (#784).

PullRequest: graal/2591
@peter-hofer
Copy link
Member

This is fixed in our master branch (but the fix did not make it into 1.0-RC10).

@wololock
Copy link
Author

wololock commented Dec 6, 2018

Thanks! Waiting for 1.0.0-RC11 to test it 👍

@wololock
Copy link
Author

@peter-hofer I've tested the code sample with GraalVM 1.0.0-RC11, works fine! Thanks!

@peter-hofer
Copy link
Member

Thank you for the feedback!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants