{"record":{"id":"6c213008e43e88cf","repo":"oracle/graal","slug":"vm-config-values-missing-that-should-be-present-in","errorCode":null,"errorMessage":"VM config values missing that should be present in %s:%n    %s","messagePattern":"VM config values missing that should be present in (.+?):%n    (.+?)","errorType":"exception","errorClass":"JVMCIError","httpStatus":null,"severity":"critical","filePath":"compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/GraalHotSpotVMConfigAccess.java","lineNumber":182,"sourceCode":"            return;\n        }\n        boolean warn = \"warn\".equals(value);\n        Formatter message = new Formatter().format(rawErrorMessage);\n        String javaHome = getSavedProperty(\"java.home\");\n        String vmName = getSavedProperty(\"java.vm.name\");\n        if (warn) {\n            message.format(\"%nSet the %s system property to \\\"ignore\\\" to suppress \", JVMCI_CONFIG_CHECK_PROP_NAME);\n            message.format(\"this warning and continue execution.%n\");\n        } else {\n            message.format(\"%nSet the %s system property to \\\"ignore\\\" to suppress \", JVMCI_CONFIG_CHECK_PROP_NAME);\n            message.format(\"this error or to \\\"warn\\\" to emit a warning and continue execution.%n\");\n        }\n        message.format(\"Currently used Java home directory is %s.%n\", javaHome);\n        message.format(\"Currently used VM configuration is: %s%n\", vmName);\n        if (warn) {\n            System.err.println(message);\n        } else {\n            throw new JVMCIError(message.toString());\n        }\n    }\n\n    /**\n     * @see HotSpotVMConfigAccess#getAddress(String, Long)\n     */\n    public long getAddress(String name, Long notPresent, boolean expectPresent) {\n        if (isPresent(name, vmAddresses, expectPresent)) {\n            return access.getAddress(name, notPresent);\n        }\n        return notPresent;\n    }\n\n    /**\n     * @see HotSpotVMConfigAccess#getAddress(String)\n     */\n    public long getAddress(String name) {\n        if (isPresent(name, vmAddresses, true)) {","sourceCodeStart":164,"sourceCodeEnd":200,"githubUrl":"https://github.com/oracle/graal/blob/a66e9ccd1d7bf2552883939aa0788dfd0e294aab/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/GraalHotSpotVMConfigAccess.java#L164-L200","documentation":"GraalHotSpotVMConfigAccess verifies that VM config entries the compiler requires (fields/offsets/constants read via getFieldOffset/getConstant with expectPresent) actually exist in the JVMCI-provided HotSpotVMConfig store. Missing entries accumulate in 'missing' and reportErrors() throws JVMCIError listing the runtime, java.home, and each missing value — the classic 'Graal does not match this HotSpot build' error.","triggerScenarios":"Initializing GraalHotSpotVMConfig against a HotSpot build whose vmstructs/JVMCI metadata lacks entries the compiler expects — e.g. a Graal jar from one JDK release running on another JDK version, or a JVMCI interface version mismatch; entries are added whenever isPresent(..., expectPresent=true) fails.","commonSituations":"Dropping a graal/compiler jar built for JDK N onto JDK N+1 (renamed/removed HotSpot fields); custom or older JVM builds with incomplete JVMCI exports; mixing libgraal-enabled and jargraal artifacts across JDK versions.","solutions":["Use the Graal/compiler artifacts that ship with (or are built for) the exact JDK you run — align JDK and Graal versions","Rebuild Graal from source against the target JDK's HotSpot sources (mx --jdk ... build) so required constants resolve","If the mismatch is known-benign during bring-up, start with -Ddebug.jdk.graal.jvmciConfigCheck=warn to log and continue, then fix the real mismatch"],"exampleFix":"# before\njava -XX:+UseJVMCICompiler -graal-old.jar ... # JVMCIError: VM config values missing ...\n\n# after: use the matching build\njava -XX:+UseJVMCICompiler   # stock JDK with its own embedded Graal\n# or during bring-up only:\njava -Ddebug.jdk.graal.jvmciConfigCheck=warn -XX:+UseJVMCICompiler ...","handlingStrategy":"fallback","validationCode":"// sanity check before enabling JVMCI on an unusual JDK: run with\n//   java -Ddebug.jdk.graal.jvmciConfigCheck=warn -XX:+UseJVMCICompiler -version\n// and inspect warnings to detect missing config values without aborting","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never mix a compiler jar across JDK major versions","Pin JDK + Graal versions together in CI matrices","Use jvmciConfigCheck=warn only during bring-up, not production"],"tags":["graal-compiler","jvmci","vm-config","version-mismatch"],"backgroundTag":null,"analyzedSha":"a66e9ccd1d7bf2552883939aa0788dfd0e294aab","analyzedAt":"2026-08-14T13:58:47.161Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}