From 5dafadf749dcba0f33936a6fd6efe39b36042a34 Mon Sep 17 00:00:00 2001 From: Justus Klausecker Date: Fri, 11 Jul 2025 03:40:30 +0200 Subject: [PATCH] Sema: remove incorrect safety check for saturating left shift --- src/Sema.zig | 2 +- test/behavior/bit_shifting.zig | 2 -- test/behavior/x86_64/binary.zig | 2 -- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Sema.zig b/src/Sema.zig index 92f6705e4ea3..0e48ef1746bd 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -14134,7 +14134,7 @@ fn zirShl( try sema.requireRuntimeBlock(block, src, runtime_src); if (block.wantSafety()) { const bit_count = scalar_ty.intInfo(zcu).bits; - if (!std.math.isPowerOfTwo(bit_count)) { + if (air_tag != .shl_sat and !std.math.isPowerOfTwo(bit_count)) { const bit_count_val = try pt.intValue(scalar_rhs_ty, bit_count); const ok = if (rhs_ty.zigTypeTag(zcu) == .vector) ok: { const bit_count_inst = Air.internedToRef((try sema.splat(rhs_ty, bit_count_val)).toIntern()); diff --git a/test/behavior/bit_shifting.zig b/test/behavior/bit_shifting.zig index 33742f21c40e..bf8ed261f821 100644 --- a/test/behavior/bit_shifting.zig +++ b/test/behavior/bit_shifting.zig @@ -169,8 +169,6 @@ test "Saturating Shift Left" { const S = struct { fn shlSat(x: anytype, y: std.math.Log2Int(@TypeOf(x))) @TypeOf(x) { - // workaround https://github.com/ziglang/zig/issues/23033 - @setRuntimeSafety(false); return x <<| y; } diff --git a/test/behavior/x86_64/binary.zig b/test/behavior/x86_64/binary.zig index 99dd47155bbf..e90c4f1eb05a 100644 --- a/test/behavior/x86_64/binary.zig +++ b/test/behavior/x86_64/binary.zig @@ -5473,8 +5473,6 @@ inline fn shlSaturate(comptime Type: type, lhs: Type, rhs: Type) Type { // workaround https://github.com/ziglang/zig/issues/23139 return lhs <<| @min(@abs(rhs), splat(ChangeScalar(Type, u64), imax(u64))); } - // workaround https://github.com/ziglang/zig/issues/23033 - @setRuntimeSafety(false); return lhs <<| @abs(rhs); } test shlSaturate {