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

[Truffle] NPE in Binding#local_variable_get #2917

Closed
nirvdrum opened this issue May 8, 2015 · 2 comments
Closed

[Truffle] NPE in Binding#local_variable_get #2917

nirvdrum opened this issue May 8, 2015 · 2 comments
Assignees
Milestone

Comments

@nirvdrum
Copy link
Contributor

nirvdrum commented May 8, 2015

Truffle can throw an NPE when calling Binding#local_variable_get with a name that doesn't exist:

> env JRUBY_OPTS=-Xtruffle.exceptions.print_java=true bin/jruby -X+T -v -e 'p binding.local_variable_get(:x)'
jruby 9.0.0.0-SNAPSHOT (2.2.2) 2015-05-08 89c7044 Java HotSpot(TM) 64-Bit Server VM 25.45-b02 on 1.8.0_45-b14 +jit [linux-amd64]
java.lang.NullPointerException
    at com.oracle.truffle.api.impl.DefaultVirtualFrame.getSlotIndexChecked(DefaultVirtualFrame.java:158)
    at com.oracle.truffle.api.impl.DefaultVirtualFrame.verifyGet(DefaultVirtualFrame.java:173)
    at com.oracle.truffle.api.impl.DefaultVirtualFrame.getBoolean(DefaultVirtualFrame.java:88)
    at com.oracle.truffle.api.impl.DefaultMaterializedFrame.getBoolean(DefaultMaterializedFrame.java:70)
    at org.jruby.truffle.nodes.methods.locals.ReadAbstractFrameSlotNode.getBoolean(ReadAbstractFrameSlotNode.java:88)
    at org.jruby.truffle.nodes.methods.locals.ReadAbstractFrameSlotNode.doBoolean(ReadAbstractFrameSlotNode.java:30)
    at org.jruby.truffle.nodes.methods.locals.ReadAbstractFrameSlotNodeGen$BooleanNode_.execute(ReadAbstractFrameSlotNodeGen.java:132)
    at org.jruby.truffle.nodes.methods.locals.ReadAbstractFrameSlotNodeGen$BaseNode_.acceptAndExecute(ReadAbstractFrameSlotNodeGen.java:79)
    at com.oracle.truffle.api.dsl.internal.SpecializationNode.uninitialized(SpecializationNode.java:390)
    at org.jruby.truffle.nodes.methods.locals.ReadAbstractFrameSlotNodeGen$UninitializedNode_.execute(ReadAbstractFrameSlotNodeGen.java:114)
    at org.jruby.truffle.nodes.methods.locals.ReadAbstractFrameSlotNodeGen.executeRead(ReadAbstractFrameSlotNodeGen.java:45)
    at org.jruby.truffle.nodes.core.BindingNodes$LocalVariableGetNode.localVariableGetCached(BindingNodes.java:83)
    at org.jruby.truffle.nodes.core.BindingNodesFactory$LocalVariableGetNodeFactory$LocalVariableGetNodeGen$LocalVariableGetCachedNode_.execute_(BindingNodesFactory.java:335)
    at org.jruby.truffle.nodes.core.BindingNodesFactory$LocalVariableGetNodeFactory$LocalVariableGetNodeGen$BaseNode_.acceptAndExecute(BindingNodesFactory.java:215)
    at com.oracle.truffle.api.dsl.internal.SpecializationNode.uninitialized(SpecializationNode.java:408)
    at org.jruby.truffle.nodes.core.BindingNodesFactory$LocalVariableGetNodeFactory$LocalVariableGetNodeGen$UninitializedNode_.execute_(BindingNodesFactory.java:273)
    at org.jruby.truffle.nodes.core.BindingNodesFactory$LocalVariableGetNodeFactory$LocalVariableGetNodeGen$BaseNode_.execute(BindingNodesFactory.java:223)
    at org.jruby.truffle.nodes.core.BindingNodesFactory$LocalVariableGetNodeFactory$LocalVariableGetNodeGen.execute(BindingNodesFactory.java:179)
    at org.jruby.truffle.nodes.control.SequenceNode.execute(SequenceNode.java:83)
    at org.jruby.truffle.nodes.methods.ExceptionTranslatingNode.execute(ExceptionTranslatingNode.java:56)
    at org.jruby.truffle.nodes.RubyRootNode.execute(RubyRootNode.java:57)
    at com.oracle.truffle.api.impl.DefaultCallTarget.call(DefaultCallTarget.java:76)
    at com.oracle.truffle.api.impl.DefaultDirectCallNode.call(DefaultDirectCallNode.java:65)
    at org.jruby.truffle.nodes.dispatch.CachedBoxedDispatchNode.executeDispatch(CachedBoxedDispatchNode.java:145)
    at org.jruby.truffle.nodes.dispatch.UnresolvedDispatchNode.executeDispatch(UnresolvedDispatchNode.java:109)
    at org.jruby.truffle.nodes.dispatch.DispatchHeadNode.dispatch(DispatchHeadNode.java:50)
    at org.jruby.truffle.nodes.dispatch.CallDispatchHeadNode.call(CallDispatchHeadNode.java:35)
    at org.jruby.truffle.nodes.RubyCallNode.execute(RubyCallNode.java:147)
    at org.jruby.truffle.nodes.RubyCallNode.executeArguments(RubyCallNode.java:163)
    at org.jruby.truffle.nodes.RubyCallNode.execute(RubyCallNode.java:142)
    at org.jruby.truffle.nodes.control.SequenceNode.execute(SequenceNode.java:83)
    at org.jruby.truffle.nodes.methods.CatchNextNode.execute(CatchNextNode.java:36)
    at org.jruby.truffle.nodes.methods.CatchReturnAsErrorNode.execute(CatchReturnAsErrorNode.java:35)
    at org.jruby.truffle.nodes.methods.CatchRetryAsErrorNode.execute(CatchRetryAsErrorNode.java:32)
    at org.jruby.truffle.nodes.methods.SetMethodDeclarationContext.execute(SetMethodDeclarationContext.java:46)
    at org.jruby.truffle.nodes.TopLevelRaiseHandler.execute(TopLevelRaiseHandler.java:32)
    at org.jruby.truffle.nodes.control.SequenceNode.execute(SequenceNode.java:83)
    at org.jruby.truffle.nodes.RubyRootNode.execute(RubyRootNode.java:57)
    at com.oracle.truffle.api.impl.DefaultCallTarget.call(DefaultCallTarget.java:76)
    at org.jruby.truffle.runtime.RubyContext.execute(RubyContext.java:281)
    at org.jruby.truffle.runtime.RubyContext.execute(RubyContext.java:270)
    at org.jruby.truffle.runtime.RubyContext.load(RubyContext.java:214)
    at org.jruby.truffle.TruffleBridgeImpl.execute(TruffleBridgeImpl.java:187)
    at org.jruby.truffle.TruffleBridgeImpl.execute(TruffleBridgeImpl.java:167)
    at org.jruby.Ruby.runInterpreter(Ruby.java:869)
    at org.jruby.Ruby.runInterpreter(Ruby.java:883)
    at org.jruby.Ruby.runNormally(Ruby.java:758)
    at org.jruby.Ruby.runFromMain(Ruby.java:575)
    at org.jruby.Main.doRunFromMain(Main.java:402)
    at org.jruby.Main.internalRun(Main.java:297)
    at org.jruby.Main.run(Main.java:226)
    at org.jruby.Main.main(Main.java:198)
-e:1:in `local_variable_get': internal implementation error - NullPointerException null com.oracle.truffle.api.impl.DefaultVirtualFrame.getSlotIndexChecked(DefaultVirtualFrame.java:158) (RubyTruffleError)
    from -e:1:in `<main>'
@bjfish
Copy link
Contributor

bjfish commented May 8, 2015

For comparision it's a NameError in ruby:

ruby -e 'p binding.local_variable_get(:x)'
-e:1:in `local_variable_get': local variable `x' not defined for #<Binding:0x007fa5c11a4118> (NameError)
    from -e:1:in `<main>'

@chrisseaton chrisseaton self-assigned this May 8, 2015
@chrisseaton
Copy link
Contributor

Fixed in c957028

@chrisseaton chrisseaton added this to the truffle-dev milestone May 8, 2015
@enebo enebo added this to the Non-Release milestone Dec 7, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants