zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit cfb5350ed43779c099914940cfe16abedb16bce7 (tree)
parent 7de67e6802d4cec114d5ede1892abe428e331cac
Author: xdBronch <51252236+xdBronch@users.noreply.github.com>
Date:   Fri,  3 Oct 2025 19:37:51 -0400

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

Diffstat:
Msrc/Sema.zig | 2+-
Mtest/behavior/memset.zig | 5+++++
2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/Sema.zig b/src/Sema.zig @@ -25299,7 +25299,6 @@ fn zirMemset(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void const elem = try sema.coerce(block, dest_elem_ty, uncoerced_elem, value_src); const runtime_src = rs: { - const ptr_val = try sema.resolveDefinedValue(block, dest_src, dest_ptr) orelse break :rs dest_src; const len_air_ref = try sema.fieldVal(block, src, dest_ptr, try ip.getOrPutString(gpa, pt.tid, "len", .no_embedded_nulls), dest_src); const len_val = (try sema.resolveDefinedValue(block, dest_src, len_air_ref)) orelse break :rs dest_src; const len_u64 = try len_val.toUnsignedIntSema(pt); @@ -25309,6 +25308,7 @@ fn zirMemset(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void return; } + const ptr_val = try sema.resolveDefinedValue(block, dest_src, dest_ptr) orelse break :rs dest_src; if (!sema.isComptimeMutablePtr(ptr_val)) break :rs dest_src; const elem_val = try sema.resolveValue(elem) orelse break :rs value_src; const array_ty = try pt.arrayType(.{ diff --git a/test/behavior/memset.zig b/test/behavior/memset.zig @@ -175,3 +175,8 @@ test "zero keys with @memset" { try expect(!Keys.keys.left); try expect(!Keys.keys.right); } + +test "@memset with zero-length array" { + var array: [0]usize = undefined; + @memset(&array, 0); +}