Sema: emit error on @intToPtr with slice dest type

Resolves: #15967
This commit is contained in:
mlugg 2023-06-10 00:56:29 +01:00 committed by Veikka Tuominen
parent bf4b43a2f7
commit 34d44e0c1c
2 changed files with 16 additions and 0 deletions

View File

@ -19794,6 +19794,16 @@ fn zirIntToPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
const target = sema.mod.getTarget();
const ptr_align = try ptr_ty.ptrAlignmentAdvanced(target, sema);
if (ptr_ty.isSlice()) {
const msg = msg: {
const msg = try sema.errMsg(block, type_src, "integer cannot be converted to slice type '{}'", .{ptr_ty.fmt(sema.mod)});
errdefer msg.destroy(sema.gpa);
try sema.errNote(block, type_src, msg, "slice length cannot be inferred from address", .{});
break :msg msg;
};
return sema.failWithOwnedErrorMsg(msg);
}
if (try sema.resolveDefinedValue(block, operand_src, operand_coerced)) |val| {
const addr = val.toUnsignedInt(target);
if (!ptr_ty.isAllowzeroPtr() and addr == 0)

View File

@ -2,8 +2,14 @@ pub export fn entry() void {
_ = @intToPtr(i32, 10);
}
pub export fn entry2() void {
_ = @intToPtr([]u8, 20);
}
// error
// backend=stage2
// target=native
//
// :2:19: error: expected pointer type, found 'i32'
// :6:19: error: integer cannot be converted to slice type '[]u8'
// :6:19: note: slice length cannot be inferred from address