mirror of
https://github.com/ziglang/zig.git
synced 2026-02-12 20:37:54 +00:00
parent
60fc18bd1c
commit
82c8e45a7e
21
src/Sema.zig
21
src/Sema.zig
@ -23938,7 +23938,26 @@ fn zirMemset(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
|
||||
return sema.fail(block, dest_src, "cannot memset constant pointer", .{});
|
||||
}
|
||||
|
||||
const dest_elem_ty = dest_ptr_ty.elemType2(mod);
|
||||
const dest_elem_ty: Type = dest_elem_ty: {
|
||||
const ptr_info = dest_ptr_ty.ptrInfo(mod);
|
||||
switch (ptr_info.flags.size) {
|
||||
.Slice => break :dest_elem_ty ptr_info.child.toType(),
|
||||
.One => {
|
||||
if (ptr_info.child.toType().zigTypeTag(mod) == .Array) {
|
||||
break :dest_elem_ty ptr_info.child.toType().childType(mod);
|
||||
}
|
||||
},
|
||||
.Many, .C => {},
|
||||
}
|
||||
return sema.failWithOwnedErrorMsg(msg: {
|
||||
const msg = try sema.errMsg(block, src, "unknown @memset length", .{});
|
||||
errdefer msg.destroy(sema.gpa);
|
||||
try sema.errNote(block, dest_src, msg, "destination type '{}' provides no length", .{
|
||||
dest_ptr_ty.fmt(mod),
|
||||
});
|
||||
break :msg msg;
|
||||
});
|
||||
};
|
||||
|
||||
const runtime_src = if (try sema.resolveDefinedValue(block, dest_src, dest_ptr)) |ptr_val| rs: {
|
||||
const len_air_ref = try sema.fieldVal(block, src, dest_ptr, try ip.getOrPutString(gpa, "len"), dest_src);
|
||||
|
||||
17
test/cases/compile_errors/memset_no_length.zig
Normal file
17
test/cases/compile_errors/memset_no_length.zig
Normal file
@ -0,0 +1,17 @@
|
||||
export fn foo() void {
|
||||
var ptr: [*]u8 = undefined;
|
||||
@memset(ptr, 123);
|
||||
}
|
||||
export fn bar() void {
|
||||
var ptr: [*c]bool = undefined;
|
||||
@memset(ptr, true);
|
||||
}
|
||||
|
||||
// error
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// :3:5: error: unknown @memset length
|
||||
// :3:13: note: destination type '[*]u8' provides no length
|
||||
// :7:5: error: unknown @memset length
|
||||
// :7:13: note: destination type '[*c]bool' provides no length
|
||||
Loading…
x
Reference in New Issue
Block a user