aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBogdan Romanyuk <65823030+wrongnull@users.noreply.github.com>2023-10-17 23:05:55 +0300
committerGitHub <noreply@github.com>2023-10-17 20:05:55 +0000
commitad168db727a1baec8b8efe0bb4418d0df7e84769 (patch)
tree4e1eea7d3dd70e18201d4111fa3bffed61a7356a /src
parent5c8912d7a445cbafba92913bdd364f9f02d18d87 (diff)
downloadzig-ad168db727a1baec8b8efe0bb4418d0df7e84769.tar.gz
zig-ad168db727a1baec8b8efe0bb4418d0df7e84769.zip
Sema: disallow `@intFromPtr` for comptime-only types
Diffstat (limited to 'src')
-rw-r--r--src/Sema.zig11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 318021fed6..f084020f95 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -9891,6 +9891,17 @@ fn zirIntFromPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!
if (!ptr_ty.isPtrAtRuntime(mod)) {
return sema.fail(block, ptr_src, "expected pointer, found '{}'", .{ptr_ty.fmt(mod)});
}
+ const pointee_ty = ptr_ty.childType(mod);
+ if (try sema.typeRequiresComptime(ptr_ty)) {
+ const msg = msg: {
+ const msg = try sema.errMsg(block, ptr_src, "comptime-only type '{}' has no pointer address", .{pointee_ty.fmt(mod)});
+ errdefer msg.destroy(sema.gpa);
+ const src_decl = mod.declPtr(block.src_decl);
+ try sema.explainWhyTypeIsComptime(msg, ptr_src.toSrcLoc(src_decl, mod), pointee_ty);
+ break :msg msg;
+ };
+ return sema.failWithOwnedErrorMsg(block, msg);
+ }
if (try sema.resolveMaybeUndefValIntable(operand)) |operand_val| ct: {
if (!is_vector) {
return Air.internedToRef((try mod.intValue(