diff options
| author | kcbanner <kcbanner@gmail.com> | 2023-04-24 02:20:44 -0400 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2023-04-26 00:53:09 +0300 |
| commit | 295b8ca467da36cd1066395e7f50b6245f456573 (patch) | |
| tree | 5a0ec69841ede820eec4b3194729cc591648292a /src/Sema.zig | |
| parent | 61236c2aa1610e0ce470bd64ba930a6430ad6de2 (diff) | |
| download | zig-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.zig | 15 |
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; + }, }; } }; |
