From 0472effc41918f85c17e11885595ff810955e626 Mon Sep 17 00:00:00 2001 From: Alan Wu Date: Thu, 6 Oct 2022 18:42:26 -0400 Subject: [PATCH] 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. --- yjit/src/core.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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);