mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
don't pass zero-length @memset to the backend
This commit is contained in:
parent
7de67e6802
commit
cfb5350ed4
2 changed files with 6 additions and 1 deletions
|
|
@ -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 elem = try sema.coerce(block, dest_elem_ty, uncoerced_elem, value_src);
|
||||||
|
|
||||||
const runtime_src = rs: {
|
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_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_val = (try sema.resolveDefinedValue(block, dest_src, len_air_ref)) orelse break :rs dest_src;
|
||||||
const len_u64 = try len_val.toUnsignedIntSema(pt);
|
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;
|
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;
|
if (!sema.isComptimeMutablePtr(ptr_val)) break :rs dest_src;
|
||||||
const elem_val = try sema.resolveValue(elem) orelse break :rs value_src;
|
const elem_val = try sema.resolveValue(elem) orelse break :rs value_src;
|
||||||
const array_ty = try pt.arrayType(.{
|
const array_ty = try pt.arrayType(.{
|
||||||
|
|
|
||||||
|
|
@ -175,3 +175,8 @@ test "zero keys with @memset" {
|
||||||
try expect(!Keys.keys.left);
|
try expect(!Keys.keys.left);
|
||||||
try expect(!Keys.keys.right);
|
try expect(!Keys.keys.right);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test "@memset with zero-length array" {
|
||||||
|
var array: [0]usize = undefined;
|
||||||
|
@memset(&array, 0);
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue