diff options
author | Alan Wu <XrXr@users.noreply.github.com> | 2022-10-06 18:42:26 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-06 18:42:26 -0400 |
commit | 0472effc41918f85c17e11885595ff810955e626 (patch) | |
tree | 9aa47a43de4d92564e1c0877cbcceaf4d2222fa1 | |
parent | 43e87c7e8ab5cbf253c8f11daf9c8ad4bc3d7b3e (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>
-rw-r--r-- | yjit/src/core.rs | 5 |
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); |