big.int: fix yet another truncate bug
Too many bugs have been found with `truncate` at this point, so it was rewritten from scratch. Based on the doc comment, the utility of `convertToTwosComplement` over `r.truncate(a, .unsigned, bit_count)` is unclear and it has a subtle behavior difference that is almost certainly a bug, so it was deleted.
This commit is contained in:
@@ -8175,7 +8175,7 @@ fn formatIntLiteral(
|
||||
try writer.writeAll(string);
|
||||
} else {
|
||||
try data.ctype.renderLiteralPrefix(writer, data.kind, ctype_pool);
|
||||
wrap.convertToTwosComplement(int, data.int_info.signedness, c_bits);
|
||||
wrap.truncate(int, .unsigned, c_bits);
|
||||
@memset(wrap.limbs[wrap.len..], 0);
|
||||
wrap.len = wrap.limbs.len;
|
||||
const limbs_per_c_limb = @divExact(wrap.len, c_limb_info.count);
|
||||
@@ -8207,7 +8207,6 @@ fn formatIntLiteral(
|
||||
c_limb_int_info.signedness = .signed;
|
||||
c_limb_ctype = c_limb_info.ctype.toSigned();
|
||||
|
||||
c_limb_mut.positive = wrap.positive;
|
||||
c_limb_mut.truncate(
|
||||
c_limb_mut.toConst(),
|
||||
.signed,
|
||||
|
||||
Reference in New Issue
Block a user