mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
std.math.big.int: normalize zero result for small multiplications
Resolves: #25221
This commit is contained in:
parent
a0ec4e270e
commit
32a1aabff7
@ -786,11 +786,10 @@ pub const Mutable = struct {
|
|||||||
assert(rma.limbs.ptr != b.limbs.ptr); // illegal aliasing
|
assert(rma.limbs.ptr != b.limbs.ptr); // illegal aliasing
|
||||||
|
|
||||||
if (a.limbs.len == 1 and b.limbs.len == 1) {
|
if (a.limbs.len == 1 and b.limbs.len == 1) {
|
||||||
const ov = @mulWithOverflow(a.limbs[0], b.limbs[0]);
|
rma.limbs[0], const overflow_bit = @mulWithOverflow(a.limbs[0], b.limbs[0]);
|
||||||
rma.limbs[0] = ov[0];
|
if (overflow_bit == 0) {
|
||||||
if (ov[1] == 0) {
|
|
||||||
rma.len = 1;
|
rma.len = 1;
|
||||||
rma.positive = (a.positive == b.positive);
|
rma.positive = (a.positive == b.positive) or rma.limbs[0] == 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1325,3 +1325,10 @@ test "large enum field values" {
|
|||||||
try expect(@intFromEnum(e) == std.math.maxInt(i128));
|
try expect(@intFromEnum(e) == std.math.maxInt(i128));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test "comptime @enumFromInt with signed arithmetic" {
|
||||||
|
const E = enum(i8) { foo = -1, bar = 0 };
|
||||||
|
const x: E = @enumFromInt(@as(i8, -1) * 0);
|
||||||
|
comptime assert(x == .bar);
|
||||||
|
comptime assert(@intFromEnum(x) == 0);
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user