mirror of
https://github.com/ziglang/zig.git
synced 2026-01-20 14:25:16 +00:00
Add error for bad cast from *T to *[n]T
Casting `*T` to `*[1]T` should still work, but every other length will now be a compiler error instead of a potential OOB access.
This commit is contained in:
parent
e1e414e62a
commit
9964f1c160
@ -24853,6 +24853,7 @@ fn coerceExtra(
|
||||
const array_ty = dest_info.pointee_type;
|
||||
if (array_ty.zigTypeTag() != .Array) break :single_item;
|
||||
const array_elem_ty = array_ty.childType();
|
||||
if (array_ty.arrayLen() != 1) break :single_item;
|
||||
const dest_is_mut = dest_info.mutable;
|
||||
switch (try sema.coerceInMemoryAllowed(block, array_elem_ty, ptr_elem_ty, dest_is_mut, target, dest_ty_src, inst_src)) {
|
||||
.ok => {},
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
export fn entry0(single: *u32) void {
|
||||
_ = @as(*const [0]u32, single);
|
||||
}
|
||||
export fn entry1(single: *u32) void {
|
||||
_ = @as(*const [1]u32, single);
|
||||
}
|
||||
export fn entry2(single: *u32) void {
|
||||
_ = @as(*const [2]u32, single);
|
||||
}
|
||||
|
||||
// error
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// :2:28: error: expected type '*const [0]u32', found '*u32'
|
||||
// :2:28: note: pointer type child 'u32' cannot cast into pointer type child '[0]u32'
|
||||
// :8:28: error: expected type '*const [2]u32', found '*u32'
|
||||
// :8:28: note: pointer type child 'u32' cannot cast into pointer type child '[2]u32'
|
||||
Loading…
x
Reference in New Issue
Block a user