authorgravatar for 51252236+xdBronch@users.noreply.github.comxdBronch <51252236+xdBronch@users.noreply.github.com> 2025-10-03 19:37:51-04:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-10-06 23:26:05+02:00
logcfb5350ed43779c099914940cfe16abedb16bce7
tree1b44193551d2a5d53c7eeae5f9693b1ef7770b34
parent7de67e6802d4cec114d5ede1892abe428e331cac
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

don't pass zero-length `@memset` to the backend


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

src/Sema.zig+1-1
......@@ -25299,7 +25299,6 @@ fn zirMemset(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
2529925299 const elem = try sema.coerce(block, dest_elem_ty, uncoerced_elem, value_src);
2530025300
2530125301 const runtime_src = rs: {
25302 const ptr_val = try sema.resolveDefinedValue(block, dest_src, dest_ptr) orelse break :rs dest_src;
2530325302 const len_air_ref = try sema.fieldVal(block, src, dest_ptr, try ip.getOrPutString(gpa, pt.tid, "len", .no_embedded_nulls), dest_src);
2530425303 const len_val = (try sema.resolveDefinedValue(block, dest_src, len_air_ref)) orelse break :rs dest_src;
2530525304 const len_u64 = try len_val.toUnsignedIntSema(pt);
......@@ -25309,6 +25308,7 @@ fn zirMemset(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
2530925308 return;
2531025309 }
2531125310
25311 const ptr_val = try sema.resolveDefinedValue(block, dest_src, dest_ptr) orelse break :rs dest_src;
2531225312 if (!sema.isComptimeMutablePtr(ptr_val)) break :rs dest_src;
2531325313 const elem_val = try sema.resolveValue(elem) orelse break :rs value_src;
2531425314 const array_ty = try pt.arrayType(.{
test/behavior/memset.zig+5
......@@ -175,3 +175,8 @@ test "zero keys with @memset" {
175175 try expect(!Keys.keys.left);
176176 try expect(!Keys.keys.right);
177177}
178
179test "@memset with zero-length array" {
180 var array: [0]usize = undefined;
181 @memset(&array, 0);
182}