diff options
author | Aiden Fox Ivey <[email protected]> | 2025-04-02 20:53:51 -0400 |
---|---|---|
committer | Takashi Kokubun <[email protected]> | 2025-04-18 21:53:01 +0900 |
commit | ee3949ac3d505394a70ff1e66b8d5ed4a9e9db6f (patch) | |
tree | 1d2413ab1d09b65d9bf89bbefec0227d35d7f169 /zjit/src | |
parent | a9809a6d666f338b10b7d5cecdff892b105cb346 (diff) |
Improve register alloc and dealloc error messaging (https://github.com/Shopify/zjit/pull/90)
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/13131
Diffstat (limited to 'zjit/src')
-rw-r--r-- | zjit/src/backend/lir.rs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/zjit/src/backend/lir.rs b/zjit/src/backend/lir.rs index 033b0760cf..a7bb91d194 100644 --- a/zjit/src/backend/lir.rs +++ b/zjit/src/backend/lir.rs @@ -1022,7 +1022,8 @@ impl RegisterPool { /// Allocate a specific register fn take_reg(&mut self, reg: &Reg, vreg_idx: usize) -> Reg { - let reg_idx = self.regs.iter().position(|elem| elem.reg_no == reg.reg_no).unwrap(); + let reg_idx = self.regs.iter().position(|elem| elem.reg_no == reg.reg_no) + .unwrap_or_else(|| panic!("Unable to find register: {}", reg.reg_no)); assert_eq!(self.pool[reg_idx], None, "register already allocated"); self.pool[reg_idx] = Some(vreg_idx); self.live_regs += 1; @@ -1032,7 +1033,8 @@ impl RegisterPool { // Mutate the pool to indicate that the given register is being returned // as it is no longer used by the instruction that previously held it. fn dealloc_reg(&mut self, reg: &Reg) { - let reg_idx = self.regs.iter().position(|elem| elem.reg_no == reg.reg_no).unwrap(); + let reg_idx = self.regs.iter().position(|elem| elem.reg_no == reg.reg_no) + .unwrap_or_else(|| panic!("Unable to find register: {}", reg.reg_no)); if self.pool[reg_idx].is_some() { self.pool[reg_idx] = None; self.live_regs -= 1; |