[Bug]: `CompilerDirectives$ShouldNotReachHere: User locals must have their info field set to a varnames index`
Open
Nobody has claimed this yet.
bug
- Dominant language
- Python
- Stars
- 1.6k
- Forks
- 155
- Avg merge
- 9h 42m
- Merged PRs (30d)
- 36
Description
Describe the bug
GraalPy crashes when running this fuzzed code:
sum is not None == 1
Operating system
Linux
CPU architecture
x86_64
GraalPy version
GraalPy 3.13.14 (Oracle GraalVM Native 25.3.4.1)
JDK version
No response
Context configuration
No response
Steps to reproduce
Snippet listed above
Expected behavior
No crash
Stack trace
User locals must have their info field set to a varnames index.
com.oracle.truffle.api.CompilerDirectives$ShouldNotReachHere: User locals must have their info field set to a varnames index.
at org.graalvm.truffle/com.oracle.truffle.api.CompilerDirectives.shouldNotReachHere(CompilerDirectives.java:794)
at org.graalvm.truffle/com.oracle.truffle.api.CompilerDirectives.shouldNotReachHere(CompilerDirectives.java:740)
at org.graalvm.py/com.oracle.graal.python.runtime.exception.PException.raiseUnboundLocalException(PException.java:609)
at org.graalvm.py/com.oracle.graal.python.nodes.bytecode_dsl.PBytecodeDSLRootNodeGen$UncachedBytecodeNodeTailCall.getLocalValueInternal(PBytecodeDSLRootNodeGen.java:38374)
at org.graalvm.truffle/com.oracle.truffle.api.bytecode.LocalAccessor.getObject(LocalAccessor.java:116)
at org.graalvm.py/com.oracle.graal.python.nodes.bytecode_dsl.PBytecodeDSLRootNode$LoadAndClearTempLocal.doObject(PBytecodeDSLRootNode.java:4338)
at org.graalvm.py/com.oracle.graal.python.nodes.bytecode_dsl.PBytecodeDSLRootNodeGen$LoadAndClearTempLocal_Node.execute$uncached(PBytecodeDSLRootNodeGen.java)
at org.graalvm.py/com.oracle.graal.python.nodes.bytecode_dsl.PBytecodeDSLRootNodeGen$UncachedBytecodeNodeTailCall.handleLoadAndClearTempLocal_(PBytecodeDSLRootNodeGen.java:37349)
at org.graalvm.py/com.oracle.graal.python.nodes.bytecode_dsl.PBytecodeDSLRootNodeGen$UncachedBytecodeNodeTailCall.__stub_handleLoadAndClearTempLocal_(PBytecodeDSLRootNodeGen.java:0)
at org.graalvm.py/com.oracle.graal.python.nodes.bytecode_dsl.PBytecodeDSLRootNodeGen$UncachedBytecodeNodeTailCall.continueAt(PBytecodeDSLRootNodeGen.java:35093)
at org.graalvm.py/com.oracle.graal.python.nodes.bytecode_dsl.PBytecodeDSLRootNodeGen.continueAt(PBytecodeDSLRootNodeGen.java:3501)
at org.graalvm.py/com.oracle.graal.python.nodes.bytecode_dsl.PBytecodeDSLRootNodeGen.execute(PBytecodeDSLRootNodeGen.java:3493)
at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:808)
at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:722)
at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:641)
at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:124)
at com.oracle.truffle.enterprise.svm/com.oracle.svm.enterprise.truffle.compiler.SubstrateEnterpriseOptimizedCallTarget.invokeCompiledAdapterOrCallBoundary(SubstrateEnterpriseOptimizedCallTarget.java:293)
at com.oracle.truffle.enterprise.svm/com.oracle.svm.enterprise.truffle.compiler.SubstrateEnterpriseOptimizedCallTarget.invokeFromInterpreter(SubstrateEnterpriseOptimizedCallTarget.java:269)
at com.oracle.truffle.enterprise.svm/com.oracle.svm.enterprise.truffle.compiler.SubstrateEnterpriseOptimizedCallTarget.doInvoke(SubstrateEnterpriseOptimizedCallTarget.java:255)
at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:573)
at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:519)
at org.graalvm.py/com.oracle.graal.python.builtins.modules.GraalPythonModuleBuiltins$RunPathNode.runFile(GraalPythonModuleBuiltins.java:432)
at org.graalvm.py/com.oracle.graal.python.builtins.modules.GraalPythonModuleBuiltins$RunPathNode.runBoundary(GraalPythonModuleBuiltins.java:387)
at org.graalvm.py/com.oracle.graal.python.builtins.modules.GraalPythonModuleBuiltins$RunPathNode.run(GraalPythonModuleBuiltins.java:357)
at org.graalvm.py/com.oracle.graal.python.builtins.modules.GraalPythonModuleBuiltinsFactory$RunPathNodeFactory$RunPathNodeGen.executeAndSpecialize(GraalPythonModuleBuiltinsFactory.java:201)
at org.graalvm.py/com.oracle.graal.python.builtins.modules.GraalPythonModuleBuiltinsFactory$RunPathNodeFactory$RunPathNodeGen.execute(GraalPythonModuleBuiltinsFactory.java:190)
at org.graalvm.py/com.oracle.graal.python.nodes.function.builtins.BuiltinCallNode$BuiltinAnyCallNode.execute(BuiltinCallNode.java:64)
at org.graalvm.py/com.oracle.graal.python.nodes.function.BuiltinFunctionRootNode.execute(BuiltinFunctionRootNode.java:337)
[...snip...]
Additional context
No response
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by running the reproducer sum is not None == 1, then inspect PException.java at raiseUnboundLocalException and the related local handling in PBytecodeDSLRootNode. Done means the snippet completes without the ShouldNotReachHere crash while preserving the expected no-crash behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, python
- Domain
- backend, compilers
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 68/100