authorgravatar for 51252236+xdBronch@users.noreply.github.comxdBronch <51252236+xdBronch@users.noreply.github.com> 2025-10-03 19:37:51-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-10-06 11:28:56-07:00
log851ae9bb43251950ddab9775df0310370a4e2301
treef437cce5896e1c3b70d138a788496f9b1310f763
parent969f2cff8258fc91d7037704ddac4e6f4f037029

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


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

src/Sema.zig+1-1
...@@ -25309,7 +25309,6 @@ fn zirMemset(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void...@@ -25309,7 +25309,6 @@ fn zirMemset(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
25309 const elem = try sema.coerce(block, dest_elem_ty, uncoerced_elem, value_src);25309 const elem = try sema.coerce(block, dest_elem_ty, uncoerced_elem, value_src);
2531025310
25311 const runtime_src = rs: {25311 const runtime_src = rs: {
25312 const ptr_val = try sema.resolveDefinedValue(block, dest_src, dest_ptr) orelse break :rs dest_src;
25313 const len_air_ref = try sema.fieldVal(block, src, dest_ptr, try ip.getOrPutString(gpa, pt.tid, "len", .no_embedded_nulls), dest_src);25312 const len_air_ref = try sema.fieldVal(block, src, dest_ptr, try ip.getOrPutString(gpa, pt.tid, "len", .no_embedded_nulls), dest_src);
25314 const len_val = (try sema.resolveDefinedValue(block, dest_src, len_air_ref)) orelse break :rs dest_src;25313 const len_val = (try sema.resolveDefinedValue(block, dest_src, len_air_ref)) orelse break :rs dest_src;
25315 const len_u64 = try len_val.toUnsignedIntSema(pt);25314 const len_u64 = try len_val.toUnsignedIntSema(pt);
...@@ -25319,6 +25318,7 @@ fn zirMemset(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void...@@ -25319,6 +25318,7 @@ fn zirMemset(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
25319 return;25318 return;
25320 }25319 }
2532125320
25321 const ptr_val = try sema.resolveDefinedValue(block, dest_src, dest_ptr) orelse break :rs dest_src;
25322 if (!sema.isComptimeMutablePtr(ptr_val)) break :rs dest_src;25322 if (!sema.isComptimeMutablePtr(ptr_val)) break :rs dest_src;
25323 const elem_val = try sema.resolveValue(elem) orelse break :rs value_src;25323 const elem_val = try sema.resolveValue(elem) orelse break :rs value_src;
25324 const array_ty = try pt.arrayType(.{25324 const array_ty = try pt.arrayType(.{
test/behavior/memset.zig+5
...@@ -174,3 +174,8 @@ test "zero keys with @memset" {...@@ -174,3 +174,8 @@ test "zero keys with @memset" {
174 try expect(!Keys.keys.left);174 try expect(!Keys.keys.left);
175 try expect(!Keys.keys.right);175 try expect(!Keys.keys.right);
176}176}
177
178test "@memset with zero-length array" {
179 var array: [0]usize = undefined;
180 @memset(&array, 0);
181}