From 07203deca20d4ff68ff5942f61e0319e00ccfd27 Mon Sep 17 00:00:00 2001 From: Rob Taylor Date: Sun, 7 Jun 2026 09:35:00 +0100 Subject: [PATCH] fix(cpu_reference): avoid debug-build overflow in mask isolation `mask & (-(mask as i32)) as u32` panics with "negate with overflow" in debug builds when `mask` has bit 31 set (negating i32::MIN). Release builds wrap silently. Use `mask.wrapping_neg()` so the lowest-set-bit isolation works identically in debug and release, making `cosim --check-with-cpu` runnable under debug builds. Co-developed-by: Claude Code v2.1.168 (claude-opus-4-8) --- src/sim/cpu_reference.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sim/cpu_reference.rs b/src/sim/cpu_reference.rs index 1e1b34ad..cb72a89c 100644 --- a/src/sim/cpu_reference.rs +++ b/src/sim/cpu_reference.rs @@ -59,7 +59,7 @@ pub fn simulate_block_v1( }; while mask != 0 { cur_state <<= 1; - let lowbit = mask & (-(mask as i32)) as u32; + let lowbit = mask & mask.wrapping_neg(); if (value & lowbit) != 0 { cur_state |= 1; } @@ -373,7 +373,7 @@ pub fn simulate_block_v1_xprop( while mask != 0 { cur_v <<= 1; cur_x <<= 1; - let lowbit = mask & (-(mask as i32)) as u32; + let lowbit = mask & mask.wrapping_neg(); if (value & lowbit) != 0 { cur_v |= 1; }