Commit 295b8ca467
Changed files (2)
src
test
cases
compile_errors
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;
+ },
};
}
};
test/cases/compile_errors/slice_to_anyopaque_pointer.zig
@@ -0,0 +1,13 @@
+export fn entry() void {
+ const slice: []const u8 = "foo";
+ const x = @as(*const anyopaque, slice);
+ _ = x;
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :3:37: error: expected type '*const anyopaque', found '[]const u8'
+// :3:37: note: cannot implicitly cast slice '[]const u8' to anyopaque pointer '*const anyopaque'
+// :3:37: note: consider using '.ptr'