summaryrefslogtreecommitdiff
path: root/yjit
diff options
context:
space:
mode:
authorAlan Wu <XrXr@users.noreply.github.com>2022-10-06 18:42:26 -0400
committerGitHub <noreply@github.com>2022-10-06 18:42:26 -0400
commit0472effc41918f85c17e11885595ff810955e626 (patch)
tree9aa47a43de4d92564e1c0877cbcceaf4d2222fa1 /yjit
parent43e87c7e8ab5cbf253c8f11daf9c8ad4bc3d7b3e (diff)
YJIT: add an assert for branch_stub_hit() (#6505)
We set the PC in branch_stub_hit(), which only makes sense if we're running with the intended iseq for the stub. We ran into an issue caught by this while tweaking code layout.
Notes
Notes: Merged-By: maximecb <maximecb@ruby-lang.org>
Diffstat (limited to 'yjit')
-rw-r--r--yjit/src/core.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/yjit/src/core.rs b/yjit/src/core.rs
index 102988db11..66c1df083f 100644
--- a/yjit/src/core.rs
+++ b/yjit/src/core.rs
@@ -1647,9 +1647,12 @@ fn branch_stub_hit_body(branch_ptr: *const c_void, target_idx: u32, ec: EcPtr) -
let cfp = get_ec_cfp(ec);
let original_interp_sp = get_cfp_sp(cfp);
- let reconned_pc = rb_iseq_pc_at_idx(rb_cfp_get_iseq(cfp), target.idx);
+ let running_iseq = rb_cfp_get_iseq(cfp);
+ let reconned_pc = rb_iseq_pc_at_idx(running_iseq, target.idx);
let reconned_sp = original_interp_sp.offset(target_ctx.sp_offset.into());
+ assert_eq!(running_iseq, target.iseq as _, "each stub expects a particular iseq");
+
// Update the PC in the current CFP, because it may be out of sync in JITted code
rb_set_cfp_pc(cfp, reconned_pc);