authorgravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2026-04-09 17:57:02-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-04-12 05:28:54+02:00
log06ab4f702e29d173919ab8e4471467e5bab05af5
tree846b8144511787bdbfd27b7313225ae13442d44c
parent2322d45d80a88730b356b6a2b0101bcffb5a0afd

llvm: correctly bitcast for memset intrinsic path


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

src/codegen/llvm/FuncGen.zig+1-1
......@@ -5127,7 +5127,7 @@ fn airMemset(self: *FuncGen, inst: Air.Inst.Index, safety: bool) Allocator.Error
51275127 const value = try self.resolveInst(bin_op.rhs);
51285128 const elem_abi_size = elem_ty.abiSize(zcu);
51295129
5130 if (elem_abi_size == 1) {
5130 if (elem_abi_size == 1 and elem_ty.bitSize(zcu) == 8) {
51315131 // In this case we can take advantage of LLVM's intrinsic.
51325132 const fill_byte = try self.bitCast(value, elem_ty, Type.u8);
51335133 const len = try self.sliceOrArrayLenInBytes(dest_slice, ptr_ty);
test/behavior/memset.zig+8
......@@ -190,3 +190,11 @@ test "@memset a global array" {
190190 @memset(&S.buf, S.buf[0] + 333);
191191 try expect(S.buf[0] == 789);
192192}
193
194test "@memset array of booleans" {
195 const S = struct {
196 var x: bool = false;
197 var y: [1]bool = undefined;
198 };
199 @memset(&S.y, S.x);
200}