Project

General

Profile

Actions

Bug #21772

closed

ruby: YJIT has panicked StackOpnd(1) should be a heap object, but was ImmSymbol for VALUE(137647867319760)

Bug #21772: ruby: YJIT has panicked StackOpnd(1) should be a heap object, but was ImmSymbol for VALUE(137647867319760)

Added by gearoiddc (Gearoid de Cleir) 3 days ago. Updated about 17 hours ago.

Status:
Closed
Assignee:
Target version:
-
[ruby-core:124121]

Description

I'm getting a YJIT has panicked crash in my rails app locally when a part of my application rapidly uses a gem I have "auto_session_timeout".

If I patch the gem by changing the symbol to a string the error goes away.

  module AutoSessionTimeout
    private

    def session_expired?(c)
      c.session[:auto_session_expires_at].<(Time.now)
    end
  end

to

  def session_expired?(c)
    c.session["auto_session_expires_at"].<(Time.now)
  end

I can consistently cause the crash but I can't find a way to reproduce the error in a snipped of code.

But it looks like YJIT is keeping the key as a sybmol even though it was converted to a string.

def [](key)
  load_for_read!
  key = key.to_s

  if key == "session_id" # <-- crash occurs here
    id&.public_id
  else
    @delegate[key]
  end
end

Didn't have the same issue on ruby 3.3 with YJIT.

System Configuration
Ruby Version: ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [x86_64-linux]

Environment: Ubuntu 22.04.5 LTS (x86_64)

Backtrace & Logs

ruby: YJIT has panicked. More info to follow...

thread '<unnamed>' panicked at ./yjit/src/codegen.rs:5018:9:
StackOpnd(1) should be a heap object, but was ImmSymbol for VALUE(137647867319760)
stack backtrace:
   0: __rustc::rust_begin_unwind
             at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:697:5
   1: core::panicking::panic_fmt
             at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/core/src/panicking.rs:75:14
   2: yjit::codegen::jit_guard_known_klass
             at /home/travis/.rvm/src/ruby-3.4.7/yjit/src/codegen.rs:5018:9
   3: yjit::codegen::gen_equality_specialized
             at /home/travis/.rvm/src/ruby-3.4.7/yjit/src/codegen.rs:3690:9
   4: yjit::codegen::gen_opt_eq
             at /home/travis/.rvm/src/ruby-3.4.7/yjit/src/codegen.rs:3753:29
   5: yjit::codegen::gen_single_block
             at /home/travis/.rvm/src/ruby-3.4.7/yjit/src/codegen.rs:1382:22
   6: yjit::core::gen_block_series_body
             at /home/travis/.rvm/src/ruby-3.4.7/yjit/src/core.rs:3088:23
   7: yjit::core::gen_block_series
             at /home/travis/.rvm/src/ruby-3.4.7/yjit/src/core.rs:3066:18
   8: yjit::core::branch_stub_hit_body
             at /home/travis/.rvm/src/ruby-3.4.7/yjit/src/core.rs:3604:17
   9: yjit::core::branch_stub_hit::{{closure}}::{{closure}}
             at /home/travis/.rvm/src/ruby-3.4.7/yjit/src/core.rs:3493:36
  10: yjit::stats::with_compile_time
             at /home/travis/.rvm/src/ruby-3.4.7/yjit/src/stats.rs:1084:15
  11: yjit::core::branch_stub_hit::{{closure}}
             at /home/travis/.rvm/src/ruby-3.4.7/yjit/src/core.rs:3493:13
  12: std::panicking::catch_unwind::do_call
             at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:589:40
  13: std::panicking::catch_unwind
             at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panicking.rs:552:19
  14: std::panic::catch_unwind
             at /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/std/src/panic.rs:359:14
  15: yjit::cruby::with_vm_lock
             at /home/travis/.rvm/src/ruby-3.4.7/yjit/src/cruby.rs:688:21
  16: yjit::core::branch_stub_hit
             at /home/travis/.rvm/src/ruby-3.4.7/yjit/src/core.rs:3492:9
  17: <unknown>
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
/home/gearoid/.rvm/gems/ruby-3.4.7@7.2.3/gems/actionpack-7.2.3/lib/action_dispatch/request/session.rb:118: [BUG] YJIT: panicked at ./yjit/src/codegen.rs:5018:9:
StackOpnd(1) should be a heap object, but was ImmSymbol for VALUE(137647867319760)
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [x86_64-linux]


Files

session_blocks.log (356 KB) session_blocks.log gearoiddc (Gearoid de Cleir), 12/11/2025 03:29 PM
Actions

Also available in: PDF Atom