aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorkcbanner <kcbanner@gmail.com>2023-04-24 02:20:44 -0400
committerVeikka Tuominen <git@vexu.eu>2023-04-26 00:53:09 +0300
commit295b8ca467da36cd1066395e7f50b6245f456573 (patch)
tree5a0ec69841ede820eec4b3194729cc591648292a /src/Sema.zig
parent61236c2aa1610e0ce470bd64ba930a6430ad6de2 (diff)
downloadzig-295b8ca467da36cd1066395e7f50b6245f456573.tar.gz
zig-295b8ca467da36cd1066395e7f50b6245f456573.zip
sema: add error for coercing a slice to an anyopaque pointer
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index ed36417876..199bdc43ab 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -25093,6 +25093,13 @@ fn coerceExtra(
} };
break :pointer;
}
+ if (inst_ty.isSlice()) {
+ in_memory_result = .{ .slice_to_anyopaque = .{
+ .actual = inst_ty,
+ .wanted = dest_ty,
+ } };
+ break :pointer;
+ }
return sema.coerceCompatiblePtrs(block, dest_ty, inst, inst_src);
}
@@ -25603,6 +25610,7 @@ const InMemoryCoercionResult = union(enum) {
ptr_bit_range: BitRange,
ptr_alignment: IntPair,
double_ptr_to_anyopaque: Pair,
+ slice_to_anyopaque: Pair,
const Pair = struct {
actual: Type,
@@ -25901,6 +25909,13 @@ const InMemoryCoercionResult = union(enum) {
});
break;
},
+ .slice_to_anyopaque => |pair| {
+ try sema.errNote(block, src, msg, "cannot implicitly cast slice '{}' to anyopaque pointer '{}'", .{
+ pair.actual.fmt(sema.mod), pair.wanted.fmt(sema.mod),
+ });
+ try sema.errNote(block, src, msg, "consider using '.ptr'", .{});
+ break;
+ },
};
}
};