authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-05-29 21:47:34-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-06-10 20:47:57-07:00
loga803e9cf48e9566638e6ec1e23fe0b885e2651ee
tree931d88834f2a1292dffb4a44207b2295d626212b
parent66ae42bb72a9ad4b1cd44b32fa5be322b07a5ffb

Sema: fix vector comparison and interning of -0


2 files changed, 9 insertions(+), 3 deletions(-)

lib/std/math/big/int.zig+3
......@@ -2158,6 +2158,9 @@ pub const Const = struct {
21582158 pub fn to(self: Const, comptime T: type) ConvertError!T {
21592159 switch (@typeInfo(T)) {
21602160 .Int => |info| {
2161 // Make sure -0 is handled correctly.
2162 if (self.eqZero()) return 0;
2163
21612164 const UT = std.meta.Int(.unsigned, info.bits);
21622165
21632166 if (!self.fitsInTwosComp(info.signedness, info.bits)) {
src/Sema.zig+6-3
......@@ -34538,10 +34538,13 @@ fn compareScalar(
3453834538 rhs: Value,
3453934539 ty: Type,
3454034540) CompileError!bool {
34541 const mod = sema.mod;
34542 const coerced_lhs = try mod.getCoerced(lhs, ty);
34543 const coerced_rhs = try mod.getCoerced(rhs, ty);
3454134544 switch (op) {
34542 .eq => return sema.valuesEqual(lhs, rhs, ty),
34543 .neq => return !(try sema.valuesEqual(lhs, rhs, ty)),
34544 else => return Value.compareHeteroAdvanced(lhs, op, rhs, sema.mod, sema),
34545 .eq => return sema.valuesEqual(coerced_lhs, coerced_rhs, ty),
34546 .neq => return !(try sema.valuesEqual(coerced_lhs, coerced_rhs, ty)),
34547 else => return Value.compareHeteroAdvanced(coerced_lhs, op, coerced_rhs, mod, sema),
3454534548 }
3454634549}
3454734550