zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 277e4a8337b233a5d74f8f5b74d606210cf6fd97 (tree)
parent 4ec421372f1d8dba8a2221d2ea9c774cdbefbe9d
Author: Justus Klausecker <justus@klausecker.de>
Date:   Sat,  9 Aug 2025 02:33:25 +0200

fix: emit vector instead of scalar u1_zero in shl_with_overflow logic

Diffstat:
Msrc/Sema.zig | 3+--
Msrc/Sema/arith.zig | 4++--
2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/Sema.zig b/src/Sema.zig @@ -15620,7 +15620,6 @@ fn zirOverflowArithmetic( // If either of the arguments is undefined, IB is possible and we return an error. // If lhs is zero, the result is zero and no overflow occurred. // If rhs is zero, the result is lhs and no overflow occurred. - // Oterhwise if either of the arguments is undefined, both results are undefined. const scalar_ty = lhs_ty.scalarType(zcu); if (maybe_rhs_val) |rhs_val| { if (maybe_lhs_val) |lhs_val| { @@ -15661,7 +15660,7 @@ fn zirOverflowArithmetic( .lt => return sema.failWithNegativeShiftAmount(block, rhs_src, rhs_elem, elem_idx), } } - if (!any_positive) break :result .{ .overflow_bit = .zero_u1, .inst = lhs }; + if (!any_positive) break :result .{ .overflow_bit = try pt.aggregateSplatValue(overflow_ty, .zero_u1), .inst = lhs }; }, else => unreachable, } diff --git a/src/Sema/arith.zig b/src/Sema/arith.zig @@ -1895,10 +1895,10 @@ fn intShlWithOverflow( const info = lhs_ty.intInfo(zcu); var lhs_space: Value.BigIntSpace = undefined; - const lhs_bigint = lhs.toBigInt(&lhs_space, zcu); + const lhs_bigint = try lhs.toBigIntSema(&lhs_space, pt); const shift_amt: usize = @intCast(try rhs.toUnsignedIntSema(pt)); - if (shift_amt >= lhs_ty.intInfo(zcu).bits) { + if (shift_amt >= info.bits) { return sema.failWithTooLargeShiftAmount(block, lhs_ty, rhs, rhs_src, vec_idx); } var result_bigint = try intShlInner(sema, lhs_bigint, shift_amt);