diff options
-rw-r--r-- | yjit/src/codegen.rs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/yjit/src/codegen.rs b/yjit/src/codegen.rs index 000f9fb516..50d65335f4 100644 --- a/yjit/src/codegen.rs +++ b/yjit/src/codegen.rs @@ -2265,6 +2265,12 @@ fn gen_getlocal_generic( ep_offset: u32, level: u32, ) -> Option<CodegenStatus> { + // Start the block with this instruction for EP-escape invalidation + if level == 0 && !jit.at_current_insn() { + defer_compilation(jit, asm, ocb); + return Some(EndBlock); + } + let local_opnd = if level == 0 && jit.assume_no_ep_escape(asm, ocb) { // Load the local using SP register asm.ctx.ep_opnd(-(ep_offset as i32)) @@ -2326,6 +2332,12 @@ fn gen_setlocal_generic( ep_offset: u32, level: u32, ) -> Option<CodegenStatus> { + // Start the block with this instruction for EP-escape invalidation + if level == 0 && !jit.at_current_insn() { + defer_compilation(jit, asm, ocb); + return Some(EndBlock); + } + let value_type = asm.ctx.get_opnd_type(StackOpnd(0)); // Fallback because of write barrier |