Skip to content

[9.4.0.0] IR compiler/interpreter bug: org.jruby.ir.operands.UndefinedValue should not be used as a valid value during execution. #7434

@boris-petrov

Description

@boris-petrov

Environment Information

Provide at least:

  • JRuby version 9.4.0.0 compiled from the latest commit as of now - 52ede67
  • Operating system and platform (e.g. uname -a) - Arch Linux, JDK 18.0.2

Other relevant info you may wish to add:

  • Installed or activated gems - check the stack-trace

Expected Behavior
My tests to run fine

Actual Behavior
My tests throw an exception:

Java::JavaLang::RuntimeException:
    IR compiler/interpreter bug: org.jruby.ir.operands.UndefinedValue should not be used as a valid value during execution.
  # org.jruby.ir.operands.UndefinedValue.undefinedOperation(UndefinedValue.java:58)
  # org.jruby.ir.operands.UndefinedValue.convertToHash(UndefinedValue.java:179)
  # org.jruby.RubyHash.replace(RubyHash.java:2150)
  # org.jruby.RubyHash.initialize_copy(RubyHash.java:2135)
  # uri_3a_classloader_3a_.jruby.kernel.kernel.RUBY$method$initialize_dup$0(uri:classloader:/jruby/kernel/kernel.rb:9)
  # org.jruby.internal.runtime.methods.CompiledIRMethod.call(CompiledIRMethod.java:165)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:185)
  # org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:218)
  # org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:173)
  # org.jruby.RubyBasicObject.dup(RubyBasicObject.java:842)
  # org.jruby.RubyHash.merge(RubyHash.java:2130)
  # build.$_dot_gems.gems.selenium_minus_webdriver_minus_4_dot_6_dot_1.lib.selenium.webdriver.common.interactions.pointer_move.RUBY$method$encode$0(build/.gems/gems/selenium-webdriver-4.6.1/lib/selenium/webdriver/common/interactions/pointer_move.rb:51)
  # org.jruby.internal.runtime.methods.CompiledIRMethod.call(CompiledIRMethod.java:152)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:148)
  # org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:210)
  # org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:142)
  # org.jruby.RubySymbol$SymbolProcBody.yieldSpecific(RubySymbol.java:1527)
  # org.jruby.RubySymbol$SymbolProcBody.doYield(RubySymbol.java:1520)
  # org.jruby.runtime.BlockBody.yield(BlockBody.java:116)
  # org.jruby.runtime.Block.yieldNonArray(Block.java:224)
  # org.jruby.RubyArray.collectArray(RubyArray.java:2778)
  # org.jruby.RubyArray.map(RubyArray.java:2812)
  # build.$_dot_gems.gems.selenium_minus_webdriver_minus_4_dot_6_dot_1.lib.selenium.webdriver.common.interactions.input_device.RUBY$method$encode$0(build/.gems/gems/selenium-webdriver-4.6.1/lib/selenium/webdriver/common/interactions/input_device.rb:55)
  # build.$_dot_gems.gems.selenium_minus_webdriver_minus_4_dot_6_dot_1.lib.selenium.webdriver.common.interactions.input_device.RUBY$method$encode$0$__VARARGS__(build/.gems/gems/selenium-webdriver-4.6.1/lib/selenium/webdriver/common/interactions/input_device.rb:54)
  # org.jruby.internal.runtime.methods.CompiledIRMethod.call(CompiledIRMethod.java:139)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:112)
  # org.jruby.ir.runtime.IRRuntimeHelpers.instanceSuper(IRRuntimeHelpers.java:1298)
  # org.jruby.ir.runtime.IRRuntimeHelpers.instanceSuperSplatArgs(IRRuntimeHelpers.java:1271)
  # org.jruby.ir.targets.indy.InstanceSuperInvokeSite.invoke(InstanceSuperInvokeSite.java:29)
  # build.$_dot_gems.gems.selenium_minus_webdriver_minus_4_dot_6_dot_1.lib.selenium.webdriver.common.interactions.pointer_input.RUBY$method$encode$0(build/.gems/gems/selenium-webdriver-4.6.1/lib/selenium/webdriver/common/interactions/pointer_input.rb:41)
  # build.$_dot_gems.gems.selenium_minus_webdriver_minus_4_dot_6_dot_1.lib.selenium.webdriver.common.interactions.pointer_input.RUBY$method$encode$0$__VARARGS__(build/.gems/gems/selenium-webdriver-4.6.1/lib/selenium/webdriver/common/interactions/pointer_input.rb:40)
  # org.jruby.internal.runtime.methods.CompiledIRMethod.call(CompiledIRMethod.java:139)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:112)
  # org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:85)
  # org.jruby.RubySymbol$SymbolProcBody.yieldInner(RubySymbol.java:1499)
  # org.jruby.RubySymbol$SymbolProcBody.doYield(RubySymbol.java:1514)
  # org.jruby.runtime.BlockBody.yield(BlockBody.java:108)
  # org.jruby.runtime.Block.yield(Block.java:188)
  # org.jruby.RubyEnumerable$20.call(RubyEnumerable.java:885)
  # org.jruby.runtime.CallBlock19.doYield(CallBlock19.java:98)
  # org.jruby.runtime.BlockBody.yield(BlockBody.java:108)
  # org.jruby.runtime.Block.yield(Block.java:188)
  # org.jruby.RubyArray.each(RubyArray.java:1988)
  # org.jruby.RubyArray$INVOKER$i$0$0$each.call(RubyArray$INVOKER$i$0$0$each.gen)
  # org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:362)
  # org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:154)
  # org.jruby.RubyEnumerable.filter_map(RubyEnumerable.java:868)
  # build.$_dot_gems.gems.selenium_minus_webdriver_minus_4_dot_6_dot_1.lib.selenium.webdriver.common.action_builder.RUBY$method$perform$0(build/.gems/gems/selenium-webdriver-4.6.1/lib/selenium/webdriver/common/action_builder.rb:238)
  # build.$_dot_gems.gems.capybara_minus_3_dot_38_dot_0.lib.capybara.selenium.node.RUBY$block$hover$1(build/.gems/gems/capybara-3.38.0/lib/capybara/selenium/node.rb:162)
  # build.$_dot_gems.gems.capybara_minus_3_dot_38_dot_0.lib.capybara.selenium.node.RUBY$method$scroll_if_needed$0(build/.gems/gems/capybara-3.38.0/lib/capybara/selenium/node.rb:233)
  # build.$_dot_gems.gems.capybara_minus_3_dot_38_dot_0.lib.capybara.selenium.node.RUBY$method$hover$0(build/.gems/gems/capybara-3.38.0/lib/capybara/selenium/node.rb:162)
  # build.$_dot_gems.gems.capybara_minus_3_dot_38_dot_0.lib.capybara.node.element.RUBY$block$hover$1(build/.gems/gems/capybara-3.38.0/lib/capybara/node/element.rb:285)
  # org.jruby.runtime.CompiledIRBlockBody.yieldDirect(CompiledIRBlockBody.java:151)
  # org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:72)
  # org.jruby.runtime.Block.yieldSpecific(Block.java:157)
  # org.jruby.ir.targets.indy.YieldSite.yieldSpecific(YieldSite.java:161)
  # build.$_dot_gems.gems.capybara_minus_3_dot_38_dot_0.lib.capybara.node.base.RUBY$method$synchronize$0(build/.gems/gems/capybara-3.38.0/lib/capybara/node/base.rb:84)
  # build.$_dot_gems.gems.capybara_minus_3_dot_38_dot_0.lib.capybara.node.element.RUBY$method$hover$0(build/.gems/gems/capybara-3.38.0/lib/capybara/node/element.rb:285)
  # org.jruby.internal.runtime.methods.CompiledIRMethod.call(CompiledIRMethod.java:152)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:148)
  # org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:210)
  # org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:351)
  # org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:144)
  # org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:346)
  # org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66)
  # org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
  # org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:136)
  # org.jruby.runtime.IRBlockBody.doYield(IRBlockBody.java:177)
  # org.jruby.runtime.BlockBody.yield(BlockBody.java:116)
  # org.jruby.runtime.Block.yieldNonArray(Block.java:224)
  # org.jruby.RubyBasicObject.yieldUnder(RubyBasicObject.java:1724)
  # org.jruby.RubyBasicObject.instance_exec(RubyBasicObject.java:2593)
  # org.jruby.RubyBasicObject$INVOKER$i$0$3$instance_exec.call(RubyBasicObject$INVOKER$i$0$3$instance_exec.gen)
  # org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:222)
  # org.jruby.ir.targets.indy.InvokeSite.fail(InvokeSite.java:278)
  # org.jruby.runtime.CompiledIRBlockBody.yieldDirect(CompiledIRBlockBody.java:151)
  # org.jruby.runtime.MixedModeIRBlockBody.yieldDirect(MixedModeIRBlockBody.java:111)
  # org.jruby.runtime.BlockBody.yield(BlockBody.java:114)
  # org.jruby.runtime.Block.yieldNonArray(Block.java:224)
  # org.jruby.specialized.RubyArrayTwoObject.collectArray(RubyArrayTwoObject.java:361)
  # org.jruby.RubyArray.map(RubyArray.java:2812)
  # org.jruby.RubyArray$INVOKER$i$0$0$map.call(RubyArray$INVOKER$i$0$0$map.gen)
  # org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroBlock.call(JavaMethod.java:560)
  # org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:85)
  # org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:94)
  # org.jruby.ir.instructions.CallBase.interpret(CallBase.java:558)
  # org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:363)
  # org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66)
  # org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:82)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:201)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:188)
  # org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:218)
  # org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:372)
  # org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:175)
  # org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:314)
  # org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66)
  # org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:82)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:201)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:188)
  # org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:218)
  # org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:372)
  # org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:175)
  # org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:314)
  # org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66)
  # org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
  # org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:136)
  # org.jruby.runtime.IRBlockBody.doYield(IRBlockBody.java:177)
  # org.jruby.runtime.BlockBody.yield(BlockBody.java:116)
  # org.jruby.runtime.Block.yieldNonArray(Block.java:224)
  # org.jruby.RubyArray.collectArray(RubyArray.java:2778)
  # org.jruby.RubyArray.map(RubyArray.java:2812)
  # org.jruby.RubyArray$INVOKER$i$0$0$map.call(RubyArray$INVOKER$i$0$0$map.gen)
  # org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroBlock.call(JavaMethod.java:560)
  # org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:329)
  # org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:87)
  # org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:94)
  # org.jruby.ir.instructions.CallBase.interpret(CallBase.java:558)
  # org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:363)
  # org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66)
  # org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
  # org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:136)
  # org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:76)
  # org.jruby.runtime.Block.yieldSpecific(Block.java:157)
  # org.jruby.ir.runtime.IRRuntimeHelpers.yieldSpecific(IRRuntimeHelpers.java:502)
  # org.jruby.ir.instructions.YieldInstr.interpret(YieldInstr.java:80)
  # org.jruby.ir.interpreter.StartupInterpreterEngine.processOtherOp(StartupInterpreterEngine.java:166)
  # org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:98)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:128)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:115)
  # org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:329)
  # org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:87)
  # org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:94)
  # org.jruby.ir.instructions.CallBase.interpret(CallBase.java:558)
  # org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:363)
  # org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66)
  # org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
  # org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:136)
  # org.jruby.runtime.IRBlockBody.doYield(IRBlockBody.java:170)
  # org.jruby.runtime.BlockBody.yield(BlockBody.java:108)
  # org.jruby.runtime.Block.yield(Block.java:188)
  # org.jruby.ir.runtime.IRRuntimeHelpers.yield(IRRuntimeHelpers.java:497)
  # org.jruby.ir.instructions.YieldInstr.interpret(YieldInstr.java:92)
  # org.jruby.ir.interpreter.StartupInterpreterEngine.processOtherOp(StartupInterpreterEngine.java:166)
  # org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:98)
  # org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:82)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:201)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:188)
  # org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:383)
  # org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:185)
  # org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:192)
  # org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:337)
  # org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66)
  # org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:82)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:201)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:188)
  # org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:218)
  # org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:372)
  # org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:175)
  # org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:314)
  # org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66)
  # org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:88)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:238)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:225)
  # org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:226)
  # org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:393)
  # org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:206)
  # org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:324)
  # org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:128)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:115)
  # org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:329)
  # org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:87)
  # org.jruby.ir.instructions.CallBase.interpret(CallBase.java:561)
  # org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:363)
  # org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66)
  # org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:76)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:164)
  # org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:151)
  # org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:210)
  # org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:351)
  # org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:144)
  # org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:346)
  # org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66)
  # org.jruby.ir.interpreter.Interpreter.INTERPRET_ROOT(Interpreter.java:96)
  # org.jruby.ir.interpreter.Interpreter.execute(Interpreter.java:81)
  # org.jruby.ir.interpreter.Interpreter.execute(Interpreter.java:30)
  # org.jruby.ir.IRTranslator.execute(IRTranslator.java:42)
  # org.jruby.Ruby.runInterpreter(Ruby.java:1280)
  # org.jruby.Ruby.loadFile(Ruby.java:2917)
  # org.jruby.runtime.load.LibrarySearcher$ResourceLibrary.load(LibrarySearcher.java:937)
  # org.jruby.runtime.load.LibrarySearcher$FoundLibrary.load(LibrarySearcher.java:895)
  # org.jruby.runtime.load.LoadService.load(LoadService.java:364)
  # org.jruby.RubyKernel.loadCommon(RubyKernel.java:1117)
  # org.jruby.RubyKernel.load(RubyKernel.java:1087)
  # org.jruby.RubyKernel$INVOKER$s$load.call(RubyKernel$INVOKER$s$load.gen)
  # org.jruby.internal.runtime.methods.JavaMethod$JavaMethodOneOrTwoBlock.call(JavaMethod.java:690)
  # org.jruby.ir.targets.indy.InvokeSite.invoke(InvokeSite.java:208)
  # java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:731)
  # org.jruby.ir.Compiler$1.load(Compiler.java:114)
  # org.jruby.Ruby.runScript(Ruby.java:1267)
  # org.jruby.Ruby.runNormally(Ruby.java:1184)
  # org.jruby.Ruby.runNormally(Ruby.java:1166)
  # org.jruby.Ruby.runNormally(Ruby.java:1202)
  # org.jruby.Ruby.runFromMain(Ruby.java:981)
  # org.jruby.Main.doRunFromMain(Main.java:398)
  # org.jruby.Main.internalRun(Main.java:282)
  # org.jruby.Main.run(Main.java:227)
  # org.jruby.Main.main(Main.java:199)

I can't give you anything more than the stacktrace for now. If you need a reproduction, it will be later. I hope the stacktrace might help you figure out what's wrong. Also, this doesn't happen when I build JRuby with commit 27e5db8 - that's what I've been using until now and it works fine.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions