diff --git a/src/codegen/llvm/FuncGen.zig b/src/codegen/llvm/FuncGen.zig index 685cd06d89..f1ebab4443 100644 --- a/src/codegen/llvm/FuncGen.zig +++ b/src/codegen/llvm/FuncGen.zig @@ -5127,7 +5127,7 @@ fn airMemset(self: *FuncGen, inst: Air.Inst.Index, safety: bool) Allocator.Error const value = try self.resolveInst(bin_op.rhs); const elem_abi_size = elem_ty.abiSize(zcu); - if (elem_abi_size == 1) { + if (elem_abi_size == 1 and elem_ty.bitSize(zcu) == 8) { // In this case we can take advantage of LLVM's intrinsic. const fill_byte = try self.bitCast(value, elem_ty, Type.u8); const len = try self.sliceOrArrayLenInBytes(dest_slice, ptr_ty); diff --git a/test/behavior/memset.zig b/test/behavior/memset.zig index 5d8db9e6e7..327c9b9766 100644 --- a/test/behavior/memset.zig +++ b/test/behavior/memset.zig @@ -190,3 +190,11 @@ test "@memset a global array" { @memset(&S.buf, S.buf[0] + 333); try expect(S.buf[0] == 789); } + +test "@memset array of booleans" { + const S = struct { + var x: bool = false; + var y: [1]bool = undefined; + }; + @memset(&S.y, S.x); +}