From 874ad98f7ab0f5b7d2b5c035b974daf163474c29 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Thu, 22 Aug 2024 13:11:22 -0400 Subject: [PATCH] Dwarf: fix treating big int limbs as signed --- src/link/Dwarf.zig | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig index 82a7bdf380..41d59c836c 100644 --- a/src/link/Dwarf.zig +++ b/src/link/Dwarf.zig @@ -1418,11 +1418,8 @@ pub const WipNav = struct { const limb_index = bit / limb_bits; const limb_shift: std.math.Log2Int(std.math.big.Limb) = @intCast(bit % limb_bits); const low_abs_part: u7 = @truncate(big_int.limbs[limb_index] >> limb_shift); - const abs_part = if (limb_shift > limb_bits - 7) abs_part: { - const next_limb: std.math.big.Limb = if (limb_index + 1 < big_int.limbs.len) - big_int.limbs[limb_index + 1] - else if (big_int.positive) 0 else std.math.maxInt(std.math.big.Limb); - const high_abs_part: u7 = @truncate(next_limb << -%limb_shift); + const abs_part = if (limb_shift > limb_bits - 7 and limb_index + 1 < big_int.limbs.len) abs_part: { + const high_abs_part: u7 = @truncate(big_int.limbs[limb_index + 1] << -%limb_shift); break :abs_part high_abs_part | low_abs_part; } else low_abs_part; const twos_comp_part = if (big_int.positive) abs_part else twos_comp_part: {