mirror of
https://github.com/ziglang/zig.git
synced 2026-02-21 16:54:52 +00:00
parent
b129350cb5
commit
a9785fe8ee
@ -8799,6 +8799,15 @@ pub const PrefetchOptions = struct {
|
||||
{#link|Optional Pointers#} are allowed. Casting an optional pointer which is {#link|null#}
|
||||
to a non-optional pointer invokes safety-checked {#link|Undefined Behavior#}.
|
||||
</p>
|
||||
<p>
|
||||
{#syntax#}@ptrCast{#endsyntax#} cannot be used for:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Removing {#syntax#}const{#endsyntax#} or {#syntax#}volatile{#endsyntax#} qualifier. TODO add a {#syntax#}@qualCast{#endsyntax#} builtin.</li>
|
||||
<li>Changing pointer address space, use {#link|@addrSpaceCast#}</li>
|
||||
<li>Increasing pointer alignment, use {#link|@alignCast#}</li>
|
||||
<li>Casting a non-slice pointer to a slice, use slicing syntax {#syntax#}ptr[start..end]{#endsyntax#}</li>
|
||||
</ul>
|
||||
{#header_close#}
|
||||
|
||||
{#header_open|@ptrToInt#}
|
||||
|
||||
11
src/Sema.zig
11
src/Sema.zig
@ -19535,7 +19535,14 @@ fn zirPtrCast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
|
||||
return sema.fail(block, src, "cast discards volatile qualifier", .{});
|
||||
}
|
||||
if (operand_info.@"addrspace" != dest_info.@"addrspace") {
|
||||
return sema.fail(block, src, "cast changes pointer address space", .{});
|
||||
const msg = msg: {
|
||||
const msg = try sema.errMsg(block, src, "cast changes pointer address space", .{});
|
||||
errdefer msg.destroy(sema.gpa);
|
||||
|
||||
try sema.errNote(block, src, msg, "consider using '@addrSpaceCast'", .{});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
}
|
||||
|
||||
const dest_is_slice = dest_ty.isSlice();
|
||||
@ -19590,6 +19597,8 @@ fn zirPtrCast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
|
||||
try sema.errNote(block, dest_ty_src, msg, "'{}' has alignment '{d}'", .{
|
||||
dest_ty.fmt(sema.mod), dest_align,
|
||||
});
|
||||
|
||||
try sema.errNote(block, src, msg, "consider using '@alignCast'", .{});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
|
||||
@ -11,3 +11,4 @@ export fn entry() u32 {
|
||||
// :3:17: error: cast increases pointer alignment
|
||||
// :3:32: note: '*u8' has alignment '1'
|
||||
// :3:26: note: '*u32' has alignment '4'
|
||||
// :3:17: note: consider using '@alignCast'
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user