oracle / graal

GraalVM compiles Java applications into native executables that start instantly, scale fast, and use fewer compute resources 🚀
https://www.graalvm.org
Other
20.28k stars 1.63k forks source link

Native image compilation of org.bouncycastle.math.raw.Nat256.mul asserts #2735

Closed zakkak closed 4 years ago

zakkak commented 4 years ago

Describe the issue When compiling code invoking org.bouncycastle.math.raw.Nat256.mul with native-image -J-ea graal throws:

Fatal error:org.graalvm.compiler.java.BytecodeParser$BytecodeParserError: java.lang.AssertionError: Clearing of second slot must have cleared the first slot too

Steps to reproduce the issue Please include both build steps as well as run steps

  1. git clone git@github.com:zakkak/graal-issue-bouncycastle.git
  2. cd graal-issue-bouncycastle
  3. mvn clean package
  4. git clone --depth 1 git@github.com:oracle/graal.git
  5. cd graal
  6. mx --primary-suite substratevm native-image -J-ea -cp ../target/graal-issue-bouncycastle-1.0-SNAPSHOT-jar-with-dependencies.jar Main

Describe GraalVM and your environment:

More details

$ mx --primary-suite substratevm native-image --native-image-info --verbose -J-ea -cp ../graal-issue-bouncycastle/target/graal-issue-bouncycastle-1.0-SNAPSHOT-jar-with-dependencies.jar Main 
Executing [
/home/zakkak/code/graal/sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/bin/java \
-XX:+UseParallelGC \
-XX:+UnlockExperimentalVMOptions \
-XX:+EnableJVMCI \
-Dtruffle.TrustAllTruffleRuntimeProviders=true \
-Dtruffle.TruffleRuntime=com.oracle.truffle.api.impl.DefaultTruffleRuntime \
-Dgraalvm.ForcePolyglotInvalid=true \
-Dgraalvm.locatorDisabled=true \
-Dsubstratevm.IgnoreGraalVersionCheck=true \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.aarch64=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.amd64=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.site=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.stack=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.code=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.common=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.amd64=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.sparc=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.meta=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.runtime=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.services=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.sparc=ALL-UNNAMED \
--add-exports=org.graalvm.truffle/com.oracle.truffle.api=ALL-UNNAMED \
--add-opens=jdk.internal.vm.compiler/org.graalvm.compiler.debug=ALL-UNNAMED \
--add-opens=jdk.internal.vm.compiler/org.graalvm.compiler.nodes=ALL-UNNAMED \
--add-opens=jdk.unsupported/sun.reflect=ALL-UNNAMED \
--add-opens=java.base/jdk.internal.module=ALL-UNNAMED \
--add-opens=java.base/jdk.internal.ref=ALL-UNNAMED \
--add-opens=java.base/jdk.internal.reflect=ALL-UNNAMED \
--add-opens=java.base/java.io=ALL-UNNAMED \
--add-opens=java.base/java.lang=ALL-UNNAMED \
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED \
--add-opens=java.base/java.lang.invoke=ALL-UNNAMED \
--add-opens=java.base/java.lang.ref=ALL-UNNAMED \
--add-opens=java.base/java.net=ALL-UNNAMED \
--add-opens=java.base/java.nio=ALL-UNNAMED \
--add-opens=java.base/java.nio.file=ALL-UNNAMED \
--add-opens=java.base/java.security=ALL-UNNAMED \
--add-opens=java.base/javax.crypto=ALL-UNNAMED \
--add-opens=java.base/java.util=ALL-UNNAMED \
--add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED \
--add-opens=java.base/sun.security.x509=ALL-UNNAMED \
--add-opens=java.base/jdk.internal.logger=ALL-UNNAMED \
--add-opens=org.graalvm.sdk/org.graalvm.nativeimage.impl=ALL-UNNAMED \
--add-opens=org.graalvm.sdk/org.graalvm.polyglot=ALL-UNNAMED \
--add-opens=org.graalvm.truffle/com.oracle.truffle.polyglot=ALL-UNNAMED \
--add-opens=org.graalvm.truffle/com.oracle.truffle.api.impl=ALL-UNNAMED \
-XX:-UseJVMCICompiler \
-Xss10m \
-Xms1g \
-Xmx14g \
-Duser.country=US \
-Duser.language=en \
-Djava.awt.headless=true \
-Dorg.graalvm.version=dev \
-Dorg.graalvm.config= \
-Dcom.oracle.graalvm.isaot=true \
-Djava.system.class.loader=com.oracle.svm.hosted.NativeImageSystemClassLoader \
-Xshare:off \
--module-path \
/home/zakkak/code/graal/sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/truffle/truffle-api.jar \
-javaagent:/home/zakkak/code/graal/sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/svm/builder/svm.jar \
-Djdk.internal.lambda.disableEagerInitialization=true \
-Djdk.internal.lambda.eagerlyInitialize=false \
-Djava.lang.invoke.InnerClassLambdaMetafactory.initializeLambdas=false \
-ea \
-Dtruffle.nfi.library=/home/zakkak/code/graal/truffle/mxbuild/linux-amd64/TRUFFLE_NFI_NATIVE/bin/libtrufflenfi.so \
-Dllvm.bin.dir=/home/zakkak/code/graal/sdk/mxbuild/linux-amd64/LLVM_TOOLCHAIN/bin/ \
-cp \
/home/zakkak/code/graal/sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/svm/builder/svm.jar:/home/zakkak/code/graal/sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/svm/builder/objectfile.jar:/home/zakkak/code/graal/sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/svm/builder/pointsto.jar:/home/zakkak/code/graal/sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/svm/builder/svm-llvm.jar:/home/zakkak/code/graal/sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/svm/builder/llvm-wrapper-shadowed.jar:/home/zakkak/code/graal/sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/svm/builder/javacpp-shadowed.jar:/home/zakkak/code/graal/sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/svm/builder/llvm-platform-specific-shadowed.jar \
'com.oracle.svm.hosted.NativeImageGeneratorRunner$JDK9Plus' \
-imagecp \
/home/zakkak/code/graal/sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/svm/library-support.jar:/home/zakkak/code/graal-issue-bouncycastle/target/graal-issue-bouncycastle-1.0-SNAPSHOT-jar-with-dependencies.jar \
-H:Path=/home/zakkak/code/graal \
-H:+DumpTargetInfo \
-H:CLibraryPath=/home/zakkak/code/graal/sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/svm/clibraries/linux-amd64,/home/zakkak/code/graal/substratevm/mxbuild/linux-amd64/SVM_HOSTED_NATIVE/linux-amd64 \
-H:Class=Main \
-H:Name=main \

]
[main:2956086]    classlist:   1,967.77 ms,  0.96 GB
[main:2956086]        (cap):     641.47 ms,  0.96 GB
[main:2956086]        setup:   2,163.60 ms,  0.96 GB
# Building image for target platform: org.graalvm.nativeimage.Platform$LINUX_AMD64
# Using native toolchain:
#   Name: GNU project C and C++ compiler (gcc)
#   Vendor: redhat
#   Version: 10.2.1
#   Target architecture: x86_64
#   Path: /usr/bin/gcc
# Using CLibrary: com.oracle.svm.core.posix.linux.libc.GLibC
[main:2956086]     (clinit):     103.57 ms,  1.71 GB
# Static libraries:
#   substratevm/mxbuild/linux-amd64/SVM_HOSTED_NATIVE/linux-amd64/liblibchelper.a
#   sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/static/linux-amd64/glibc/libnet.a
#   substratevm/mxbuild/linux-amd64/SVM_HOSTED_NATIVE/linux-amd64/libffi.a
#   sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/static/linux-amd64/glibc/libnio.a
#   sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/static/linux-amd64/glibc/libjava.a
#   sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/static/linux-amd64/glibc/libfdlibm.a
#   sdk/mxbuild/linux-amd64/GRAALVM_AA6F4A609A_JAVA11/graalvm-aa6f4a609a-java11-20.3.0-dev/lib/static/linux-amd64/glibc/libzip.a
#   substratevm/mxbuild/linux-amd64/SVM_HOSTED_NATIVE/linux-amd64/libjvm.a
# Other libraries: pthread,dl,z,rt
[main:2956086]   (typeflow):   5,359.26 ms,  1.71 GB
[main:2956086]    (objects):   5,731.48 ms,  1.71 GB
[main:2956086]   (features):     208.34 ms,  1.71 GB
[main:2956086]     analysis:  11,588.49 ms,  1.71 GB
[main:2956086]     universe:     414.14 ms,  1.71 GB
[main:2956086]      (parse):     773.14 ms,  1.71 GB
[main:2956086]      compile:     826.97 ms,  1.71 GB
Fatal error:org.graalvm.compiler.java.BytecodeParser$BytecodeParserError: java.lang.AssertionError: Clearing of second slot must have cleared the first slot too
        at parsing org.bouncycastle.math.raw.Nat256.mul(Unknown Source)
        at method: void org.bouncycastle.math.raw.Nat256.mul(int[], int[], int[])
        at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.throwParserError(BytecodeParser.java:2580)
        at com.oracle.svm.hosted.phases.SharedGraphBuilderPhase$SharedBytecodeParser.throwParserError(SharedGraphBuilderPhase.java:96)
        at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(BytecodeParser.java:3418)
        at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.processBlock(BytecodeParser.java:3220)
        at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.build(BytecodeParser.java:1090)
        at com.oracle.svm.hosted.phases.HostedBytecodeParser.build(HostedGraphBuilderPhase.java:108)
        at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.buildRootMethod(BytecodeParser.java:984)
        at jdk.internal.vm.compiler/org.graalvm.compiler.java.GraphBuilderPhase$Instance.run(GraphBuilderPhase.java:84)
        at com.oracle.svm.hosted.phases.SharedGraphBuilderPhase.run(SharedGraphBuilderPhase.java:70)
        at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.run(Phase.java:49)
        at jdk.internal.vm.compiler/org.graalvm.compiler.phases.BasePhase.apply(BasePhase.java:214)
        at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.apply(Phase.java:42)
        at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.apply(Phase.java:38)
        at com.oracle.svm.hosted.code.CompileQueue.defaultParseFunction(CompileQueue.java:726)
        at com.oracle.svm.hosted.code.CompileQueue.doParse(CompileQueue.java:691)
        at com.oracle.svm.hosted.code.CompileQueue$ParseTask.run(CompileQueue.java:307)
        at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$execute$0(CompletionExecutor.java:173)
        at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
        at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Caused by: java.lang.AssertionError: Clearing of second slot must have cleared the first slot too
        at jdk.internal.vm.compiler/org.graalvm.compiler.java.FrameStateBuilder.clearNonLiveLocals(FrameStateBuilder.java:675)
        at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.createBytecodeExceptionFrameState(BytecodeParser.java:3943)
        at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.emitBytecodeExceptionCheck(BytecodeParser.java:1580)
        at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.maybeEmitExplicitNullCheck(BytecodeParser.java:1535)
        at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.genLoadIndexed(BytecodeParser.java:4039)
        at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.processBytecode(BytecodeParser.java:5202)
        at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(BytecodeParser.java:3413)
        ... 20 more
Error: Image build request failed with exit status 1
com.oracle.svm.driver.NativeImage$NativeImageError: Image build request failed with exit status 1
        at com.oracle.svm.driver.NativeImage.showError(NativeImage.java:1571)
        at com.oracle.svm.driver.NativeImage.build(NativeImage.java:1321)
        at com.oracle.svm.driver.NativeImage.performBuild(NativeImage.java:1282)
        at com.oracle.svm.driver.NativeImage.main(NativeImage.java:1241)
        at com.oracle.svm.driver.NativeImage$JDK9Plus.main(NativeImage.java:1753)
jerboaa commented 4 years ago

@christianwimmer Do you mind pointing us to the PR which fixed this? Or asked differently, why was this closed? Thanks!

christianwimmer commented 4 years ago

Fixed in https://github.com/oracle/graal/commit/929dde28d8ba99b3d044be2b6fb86ce1625a2286

jerboaa commented 4 years ago

Thanks very much, @christianwimmer!