Skip to content

Commit 851ae9b

Browse files
xdBronchandrewrk
authored andcommitted
don't pass zero-length @memset to the backend
1 parent 969f2cf commit 851ae9b

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

src/Sema.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25309,7 +25309,6 @@ fn zirMemset(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
2530925309
const elem = try sema.coerce(block, dest_elem_ty, uncoerced_elem, value_src);
2531025310

2531125311
const runtime_src = rs: {
25312-
const ptr_val = try sema.resolveDefinedValue(block, dest_src, dest_ptr) orelse break :rs dest_src;
2531325312
const len_air_ref = try sema.fieldVal(block, src, dest_ptr, try ip.getOrPutString(gpa, pt.tid, "len", .no_embedded_nulls), dest_src);
2531425313
const len_val = (try sema.resolveDefinedValue(block, dest_src, len_air_ref)) orelse break :rs dest_src;
2531525314
const len_u64 = try len_val.toUnsignedIntSema(pt);
@@ -25319,6 +25318,7 @@ fn zirMemset(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
2531925318
return;
2532025319
}
2532125320

25321+
const ptr_val = try sema.resolveDefinedValue(block, dest_src, dest_ptr) orelse break :rs dest_src;
2532225322
if (!sema.isComptimeMutablePtr(ptr_val)) break :rs dest_src;
2532325323
const elem_val = try sema.resolveValue(elem) orelse break :rs value_src;
2532425324
const array_ty = try pt.arrayType(.{

test/behavior/memset.zig

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,3 +174,8 @@ test "zero keys with @memset" {
174174
try expect(!Keys.keys.left);
175175
try expect(!Keys.keys.right);
176176
}
177+
178+
test "@memset with zero-length array" {
179+
var array: [0]usize = undefined;
180+
@memset(&array, 0);
181+
}

0 commit comments

Comments
 (0)